有没有比以下方法更有效的方法来汇总子词典的键?
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
答案 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}
您无需在此之前定义Total
,Counter
将在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。