2013-08-21 48 views
1

我有一些程序的7個字典中的數據是使用ETREE獲取的,問題是python不會爲輸出中顯示的每個字典創建單獨的字典實例,只要我打印任何這些字典我得到相同的輸出,這是一個具有所有數據聯合的大型字典。不同字典共享相同的實例

 
tr_dict,tr_text,exp_dict,exp_text,top_dict,top_text,times=[{}]*7 #create n empty dictionaries 
    for tr in transcript: 
     trtext = tr.find('TATION/ANNOTATION_VALUE').text 
     tr_time_ref = tr.find('TATION').attrib['TIME_SLOT_REF1'] 
     tr_ann_ref = tr.find('ATION').attrib['ANNOTATION_ID'] 

     tr_dict[tr_ann_ref] = tr_time_ref 
     tr_text[tr_time_ref]=trtext 

... 

輸出:

 
[Dbg]>>> exp_dict is exp_text 
True 
[Dbg]>>> tr_dict is tr_text 
True 
[Dbg]>>> tr_dict is exp_dict 
True 

Ofcourse我不希望這樣的事情發生,我想蟒蛇創建和使用一個單獨的字典每個。

+1

[Python列表索引]的可能重複(http://stackoverflow.com/questions/13058458/python-list-index) – ecatmur

+0

你有沒有考慮tr_dict = {},tr_text = {}等等? – foosion

+0

@ecatmur感謝您指出真實的原因(通過引用傳遞),這個快捷方式花費我時間:( – stackit

回答

5

這裏的問題:

[{}] * 7 

而是執行此操作:

[{}, {}, {}, {}, {}, {}, {}] 

說明:第一行會創建一個字典和複製7個引用它在列表中,而第二行創建七個不同的字典 - 這就是你想要做的。另外,如在註釋中規定,這也將工作:

[{} for _ in range(7)] 
+7

或'[{} for _in range(7)]',這並不短,但可以更容易地計算字典。 – delnan

相關問題