不同的词典共享同一个实例

时间:2013-08-21 19:20:54

标签: python dictionary

我在一个程序中有7个字典,其数据是使用ETREE获取的,问题是python没有为每个字典创建一个单独的dict实例,如输出中所示,每当我打印任何这些dicts时,我得到相同的输出,它是一个具有所有数据联合的大型字典。

 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

当然我不希望这种情况发生,我希望python为每个创建并使用单独的dict。

1 个答案:

答案 0 :(得分:5)

问题在于:

[{}] * 7

请改为:

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

说明:第一行将创建一个字典,并在列表中复制七个对它的引用,而第二行创建七个不同的字典 - 这就是你想要做的。或者,如评论中所述,这也将起作用:

[{} for _ in range(7)]