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]}
我在哪里做错了?
答案 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