将键上的defaultdict相加,然后将它们分开

2024-09-18 01:44:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个1000+个默认dict的字典,我想遍历每个默认dict,在key上求和,然后除以count得到每个key的平均值。你知道吗

每个默认dict都有相同的键,即

{'A': 0.0, 'B': 1.0, 'C': 1.0, 'D': 1.0, 'E': 1.0}
{'A': 2.0, 'B': 1.2, 'C': 3.0, 'D': 1.0, 'E': 3.0}

我希望以下是我的输出

{'A': 1.0, 'B': 1.1, 'C': 2.0, 'D': 1.0, 'E': 2.0}

如何在数据帧中迭代地添加默认的dict,然后对它们进行除行操作?还是有更好的方法?你知道吗

谢谢


Tags: 数据方法key字典countdict平均值
3条回答

把字典理解和sum一起使用怎么样:

d1 = {'A': 0.0, 'B': 1.0, 'C': 1.0, 'D': 1.0, 'E': 1.0}
d2 = {'A': 2.0, 'B': 1.2, 'C': 3.0, 'D': 1.0, 'E': 3.0}
dicts = {"d1": d1, "d2": d2}
n = len(dicts)
res = {k: sum(d[k] for d in dicts.values()) / n for k in d1}
# {'A': 1.0, 'B': 1.1, 'C': 2.0, 'D': 1.0, 'E': 2.0}

注意:这是假设,正如您在问题中所写的,所有dict都有相同的键,或者是defaultdicts,这样丢失的键不会导致错误。你知道吗

可以使用^{}对两个字典值执行平均值,然后将序列转换回字典:

import pandas as pd

a = pd.Series({'A': 2.0, 'B': 1.2, 'C': 3.0, 'D': 1.0, 'E': 3.0})
b = pd.Series({'A': 0.0, 'B': 1.0, 'C': 1.0, 'D': 1.0, 'E': 1.0})
c = ((a+b)/2).round(1)
print(c.to_dict())
# {'A': 1.0, 'B': 1.1, 'D': 1.0, 'E': 2.0, 'C': 2.0}

您可以使用collections.Counter稍微简化一下:

summed_dict = collections.Counter()
for d in partial_dicts:
    summed_dict.update(d)

# Use .viewitems or .iteritems instead of .items on Py2
average_dict = {k: v / len(partial_dicts) for k, v in summed_dict.items()}

相关问题 更多 >