使用for循环在字典中附加值

时间:2019-01-21 14:23:53

标签: python list dictionary for-loop append

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 :(得分:0)

您有两种选择。可以将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效率更高,而且可读性更高。

答案 1 :(得分:0)

python中的列表为mutable objects,这意味着l变量始终指向同一列表对象。您可以通过以下操作轻松解决此问题:

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

    #(...) 

那样,每次迭代都会实例化一个新的列表对象。

  

注意:您可以使用list comprehension来简化代码:

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