2013-08-21 50 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

相关问题