добавление в список значений в словаре во время итерации

#python #dictionary #for-loop

#python #словарь #for-цикл

Вопрос:

Я пытался посчитать делители из 10 чисел и добавить их в качестве значения в их словарь, но когда я пытался добавить другие делители в список значений, этого не произошло и было заменено. Интересно, почему это происходит.

 a = []
t = dict()
for i in range(10):
    a.append(input())
    a = [int(i) for i in a]
for num in a:
    for x in range (1, num   1):
        if (num % x) == 0:
            t[num] = []
            t[num].append(x)
print(t)
  

Ответ №1:

Это потому, что вы повторно инициализируете t[num] , когда не должны:

 a = []
t = dict()
for i in range(10):
    a.append(input())
    a = [int(i) for i in a]
for num in a:
    for x in range (1, num   1):
        if (num % x) == 0:
            if num not in t:  # Here: init t[num] to [] only if it does not yet exist
                t[num] = []
            t[num].append(x)

print(t)
  

Ответ №2:

defaultdict может облегчить вам жизнь здесь, поскольку он позаботится о распределении списка.

 from collections import defaultdict

a = []
t = defaultdict(list)
for i in range(10):
    a.append(input())
    a = [int(i) for i in a]
for num in a:
    for x in range (1, num   1):
        if (num % x) == 0:
            t[num].append(x)
print(t)