Попытка использовать карту python для добавления входных значений в словарь

#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}