Dict List继续覆盖 - 我做错了什么?

时间:2016-07-20 16:37:59

标签: python python-3.x pandas dictionary data-analysis

我之前没有遇到过这个问题,并且一直尝试对其进行一段时间的排查,但似乎无法弄清楚问题(尝试了各种各样的事情,包括创建副本,深层副本和附加到DataFrame)

基本上,我正在尝试遍历列表,创建字典并将该字典附加到不同的列表。字典创建每次都是唯一的,但它会覆盖所有以前的字典并添加它。

如果有明显的答案,请提前抱歉 - 这个还是新的。

请参阅下面的代码:

bigram_values_dict_list = []
bigram_values_dict = {}
counter = 0

for bigram in bigram_string_list:
    bigram_values_dict['bigram'] = bigram
    bigram_values_dict['impressions'] = get_total_impressions(bigram)

    print(bigram_values_dict)

    counter += 1

    if counter % 10 == 0:
        print(bigram_values_dict_list)

    bigram_values_dict_list.append(bigram_values_dict)

输出:

{'bigram': 'mobile site', 'impressions': 10344864}
{'bigram': 'learn more!', 'impressions': 4167059}
{'bigram': 'lawn &', 'impressions': 742291}
{'bigram': '& garden', 'impressions': 980153}
[{'bigram': '& garden', 'impressions': 2123500}, {'bigram': '& garden', 'impressions': 2123500}, {'bigram': '& garden', 'impressions': 2123500}, {'bigram': '& garden', 'impressions': 2123500}, {'bigram': '& garden', 'impressions': 2123500}, {'bigram': '& garden', 'impressions': 2123500}, {'bigram': '& garden', 'impressions': 2123500}, {'bigram': '& garden', 'impressions': 2123500}, {'bigram': '& garden', 'impressions': 2123500}]

我不认为我曾经遇到过Python 2的这个问题。也许我错过了什么?

提前感谢任何帮助/见解!!

1 个答案:

答案 0 :(得分:2)

变化:

bigram_values_dict_list.append(bigram_values_dict)

为:

bigram_values_dict_list.append(bigram_values_dict.copy())

通过这种方式,您字典的副本附加到列表中,因此将来修改字典不会影响已经附加的字典。

另一个替代方案是在for循环的每次迭代中(重新)定义字典。