Добавление значений в словарь с использованием цикла for - PullRequest
0 голосов
/ 21 января 2019
dic={}
l=[]
for i in range(0,2):
    c=input("Enter your name").strip()

    for i in range(0,3):
        d=int(input("Enter Your marks: "))
        l.append(d)
    dic[c]=l



print(dic)
print(l)

Вывод:

{'alex': [36, 54, 78, 57, 78, 94], 'harry': [36, 54, 78, 57, 78, 94]}

Ожидаемый вывод:

{'alex': [36, 54, 78], 'harry': [57, 78, 94]}

Где я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Списки в python - это изменяемые объекты , что означает, что переменная l всегда указывает на один и тот же объект списка.Вы можете легко исправить это, выполнив:

dic={}
for i in range(0,2):
    l=[]
    c=input("Enter your name").strip()

    #(...) 

Таким образом, новый объект списка создается на каждой итерации.

Примечание: вы можете упростить свой код, используя понимание списка :

dic={}
for i in range(2):
    c = input("Enter your name").strip()
    l = [int(input("Enter Your marks: ")) for _ in range(3)]     
    dic[c]=l
0 голосов
/ 21 января 2019

У вас есть несколько вариантов. Либо переопределите l как пустой список в вашем внешнем цикле for, чтобы к нему не добавлялся один и тот же список. Или используйте collections.defaultdict, чтобы добавить к списку значение по умолчанию. Вот пример второго варианта:

from collections import defaultdict

dic = defaultdict(list)
for i in range(2):
    c = input("Enter your name").strip()
    for i in range(3):
        dic[c].append(int(input("Enter Your marks: ")))

Использование defaultdict более эффективно и, возможно, более читабельно.

...