繁体   English   中英

Python:如何将字典键的值附加在列表中而不是引用中?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM