0

我有一个由名称和每个键中的列表组成的字典,如下所示:

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]]]

有什么想法吗?谢谢。

4

2 回答 2

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 。

于 2012-06-08T10:28:07.600 回答
1

只是改变:

    list1.append([i2[0],dict1[i2[0]]]) 

到:

    list1.append([i2[0],dict1[i2[0]][:]])

这将复制 dict1 中列表的当前值,而不仅仅是引用它。

(我猜这个附加曾经是一个打印语句,它只会在 dict1 中显示列表的当前值。但是当你将它保存到 list1 中时,你保存的是对列表的引用,而不是它的副本。[:]slice 操作符会创建一个副本,因此不会将附加到 key 列表的附加内容i2[0]添加到副本中。)

于 2012-06-08T11:55:37.157 回答