我有一个字典,由每个键中的名称和列表组成,如下所示:
dict1={}
for i in names:
dict1[i]=[]
然后,我处理一个csv文件,我找到了我需要的结果,我将它附加到相应的dictonary值,然后在列表中追加名称和字典值,如下所示:
list1=[]
for i2 in data:
total_score=sum(i2[1:4])
dict1[i2[0]].append(total_score)
list1.append([i2[0],dict1[i2[0]]])
如果我尝试打印list1的元素,我会得到每个键的最终列表,而不是progessive列表。
结尾列表应如下所示:
list1=[[name1,[50]],[name1,[50,60]],[name1,[50,60,0,85]]]
有什么想法吗?谢谢。
答案 0 :(得分:2)
除非你将克隆你的清单,否则它只会有一个副本(用你的话说,最后一个)。 如果我理解你想要的东西,解决方案就像
list1=[]
for i2 in data:
total_score=sum(i2[1:4])
templist = dict1[i2[0]][:]
templist.append(total_score)
list1.append([i2[0],templist])
有关详细信息,请参阅http://docs.python.org/library/copy.html。
答案 1 :(得分:1)
只需改变:
list1.append([i2[0],dict1[i2[0]]])
为:
list1.append([i2[0],dict1[i2[0]][:]])
这将复制dict1中列表的当前值,而不是仅仅引用它。
(我猜这个追加曾经是一个打印语句,只会在dict1中显示列表的当前值。但是当你将它保存到list1中时,你保存对列表的引用,而不是副本。[:]
切片操作符进行复制,因此不会将对键i2[0]
列表的附加追加添加到副本中。)