我在一个程序中有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。
答案 0 :(得分:5)
问题在于:
[{}] * 7
请改为:
[{}, {}, {}, {}, {}, {}, {}]
说明:第一行将创建一个字典,并在列表中复制七个对它的引用,而第二行创建七个不同的字典 - 这就是你想要做的。或者,如评论中所述,这也将起作用:
[{} for _ in range(7)]