pandas Python字典在每次迭代中更新值和元素

qyyhg6bp  于 2023-02-02  发布在  Python
关注(0)|答案(1)|浏览(179)

我有一个名为summary的主字典。

summary = {}

我还有另一个字典"temp",它是在循环的每次迭代中使用不同的键值对生成的。
例如:在循环的第一次迭代中,

temp = {'a': 10, 'b': 50}

在循环第二次迭代中,

temp = {'a': 40, 'b': 20, 'c'=100}

我希望主字典summary在每次迭代后用temp的元素更新。如果summary中尚未存在键,则应将temp中的键值对输入其中。如果"summary"中已存在键,则需要将值添加到"summary"中该键的现有值中。
所以在两次迭代之后我想要的结果是,

summary = {'a': 50, 'b': 70, 'c'=100}

我尝试使用更新功能,但它不工作

eivgtgni

eivgtgni1#

在这里使用dict.update不会得到你想要的结果,因为它完全覆盖了字典中的值,你需要做的是在每次循环迭代结束时把值添加到summary中现有的键值对中。
我将使用defaultdict作为summary,这样您就可以轻松地从创建的每个temp dict添加到它,而不必显式地将键初始化为0。在每次迭代结束时,从每个temp dict中获取条目,并将它们一次一个地添加到摘要中。
示例:

from collections import defaultdict

temp_dicts = [{'a': 10, 'b': 50}, {'a': 40, 'b': 20, 'c': 100}]

summary = defaultdict(int)

for temp in temp_dicts:
    for key, value in temp.items():
        summary[key] += value

print(dict(summary))

输出:

{'a': 50, 'b': 70, 'c': 100}

使用Counter也可以获得类似的结果,它支持跟踪键的计数。使用|操作符,可以直接从temp指令追加

from collections import Counter

temp_dicts = [{'a': 10, 'b': 50}, {'a': 40, 'b': 20, 'c': 100}]

summary = Counter()

for temp in temp_dicts:
    summary |= temp

print(dict(summary))

相关问题