[英]Python:how do you append the value of a dictionary key in a list and not the reference?
我有一个字典,每个字典由名称和一个列表组成,如下所示:
dict1={}
for i in names:
dict1[i]=[]
然后,我处理一个csv文件,找到需要的结果,将其附加到相应的字典值上,然后在列表中添加名称和字典值,如下所示:
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的元素,则会得到每个键的最终列表,而不是渐进式列表。
结束列表应如下所示:
list1=[[name1,[50]],[name1,[50,60]],[name1,[50,60,0,85]]]
有什么想法吗?
除非您以某种方式克隆您的列表,否则只有一个副本(用您的话说,就是最后一个)。 如果我了解您的需求,解决方案就像
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 。
只是改变:
list1.append([i2[0],dict1[i2[0]]])
至:
list1.append([i2[0],dict1[i2[0]][:]])
这将在dict1中复制列表的当前值,而不仅仅是引用它。
(我猜想这个追加曾经是一个打印语句,它只会在dict1中显示列表的当前值。但是,当将其保存到list1中时,会保存对列表的引用,而不是副本。 [:]
slice运算符进行复制,因此不会将密钥i2[0]
的列表的其他追加添加到副本中。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.