将嵌套词典的结果相加

时间:2019-01-07 01:19:41

标签: python dictionary

有没有比以下方法更有效的方法来汇总子词典的键?

Kernel

我觉得有一种方法可以对此进行简化,但是我无法弄清楚。我已经在下面的问题表格中写下了正在发生的事情。我想出了一个答案,但我认为那里有更好的答案。

如果我有以下字典for house in my_dictionary: artifact['Total']['Count'] += artifact['A']['Count'] artifact['Total']['Action'] += artifact['B']['Action'] artifact['Total']['Passive'] += artifact['C']['Passive']

my_dictionary

创建 { "A": { "Count": 3, "Action": 3, "Passive": 0 }, "B": { "Count": 1, "Action": 0, "Passive": 1 }, "C": { "Count": 1, "Action": 1, "Passive": 0 }, "Total": { "Count": 0, "Action": 0, "Passive": 0 } 后(my_dictionary中的所有内容都为空白),我将填充Total,其中Total是每个其他字段各自键的总和?

Total

2 个答案:

答案 0 :(得分:2)

collections.Counter可以通过类似以下方式很好地解决此问题:

from collections import Counter

counts = Counter()
for o in my_dictionary.values():
   counts.update(o)

my_dictionary['Total'] = dict(counts)

总计将保留结果:

{'Count': 5, 'Action': 4, 'Passive': 1}

您无需在此之前定义TotalCounter将在counts字典中为列表中的每个键输入一个条目。

答案 1 :(得分:0)

您的问题可以表述为“假设所有字典都具有相同的键,如何将字典中的键值加在一起存储为字典值?”

这看起来像:

result = {k: 0 for k, _ in data[next(iter(data))].items()}
for _, d in data.items():
    for k, v in d.items():
        result[k] += v

但是也许输入中的所有词典都不具有相同的键?

result = {}
for _, d in data.items():
    for k, v in d.items():
        if k in result:
            result[k] += v
        else:
            result[k] = v

下次,请提供您问题的minimal, complete and verifiable example