2012-06-08 47 views
0

我在每一個關鍵,像下面的字典由名稱和一個列表:Python:如何在列表中添加字典鍵值而不是引用?

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

如果我嘗試打印列表1中的元素,我得到的每一個關鍵的最終名單,而不是progessive名單。

期末名單應該是這樣的:?

list1=[[name1,[50]],[name1,[50,60]],[name1,[50,60,0,85]]] 

任何想法感謝。

+5

這不能是您的實際代碼,因爲'list.append'只有一個參數。 –

+0

@larsmans:所有的'list.append'調用都有一個參數。最後一個是添加一個列表,其中的項目用逗號分隔。 – martineau

+0

@martineau:在我發表我的評論後,OP編輯了這個問題。 –

回答

1

只是改變:

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

到:

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

這將複製,而不是隻引用它在dict1列表的當前值。我猜這個append過去是一個打印語句,它只顯示dict1中列表的當前值,但是當你將它保存到list1中時,你保存對列表的引用,而不是[:]切片操作員進行復制,以便附加追加到關鍵字i2[0]的列表將不會添加到副本中。)

+0

謝謝,這是我想要的。 – GiannisIordanou

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

相關問題