#python #dictionary
Вопрос:
Я использую map для передачи входных параметров из STDIN в свою функцию dict_add, но когда я распечатываю свой словарь, он пуст.
Может кто-нибудь, пожалуйста, сказать мне, где я ошибаюсь?
Не делая этого по какой-либо причине, просто практикуясь в коде python.
store = {}
def dict_add(n):
store[n] = store.get(n,0) 1
results = map(dict_add,input("Number: ").split())
print(store) # comes out empty
Ответ №1:
map
является итератором, поэтому dict_add
на самом деле не вызывается, пока вы каким-либо образом его не повторите. Пример:
list(map(dict_add,input("Number: ").split()))
или
for _ in map(dict_add,input("Number: ").split()):
pass
Я не говорю, что это лучший способ достичь того, что вы пытаетесь сделать, но именно поэтому вы видите такое поведение.
Комментарии:
1. 1 за объяснение. Для OP.. Карта должна использоваться для преобразования данных в другой формат. Если вы вызываете метод void, вам следует просто использовать стандартный цикл for
for n in input("Number: ").split(): dict_add(n)
. Далее, используяstore = defaultdict(int)
вы могли бы просто сделать:for n in input("Number: ").split(): store[n] = 1
Ответ №2:
Я не уверен , зачем вы используете map
, вы можете просто передать значение.
также .split()
верните массив, и я думаю, что вы хотите передать входные данные в качестве значения
тоже result variable is never used
store = {}
def dict_add(n):
global store
store[n] = store.get(n, 0) 1
dict_add(input("Number: "))
print(store) # {'1': 1}
вы можете сделать что-то подобное в цикле, чтобы он возвращал больший размер
store = {}
def dict_add(n):
global store
store[n] = store.get(n, 0) 1
for count in range(5):
dict_add(input("Number: "))
print(store) # {'1': 2, '2': 1, '3': 1, '4': 1}