【发布时间】:2015-07-31 06:22:29
【问题描述】:
给定一个包含三层键的字典,求和值的最快方法是什么?这是我目前的方法:
from collections import defaultdict
dicts = [ {'a':{'b':{'c':1}}}, {'a':{'b':{'c':4, 'e':3}}} ]
def sum_three_deep_dict_values(dicts):
'''Read in two dicts and return a dictionary that contains their outer-joined keys and value sums'''
combined = defaultdict(lambda: defaultdict(lambda: defaultdict(int)))
for d in dicts:
for w1, val_dict in d.iteritems():
for w2 in val_dict.iterkeys():
for w3 in val_dict[w2].iterkeys():
combined[w1][w2][w3] += d[w1][w2][w3]
return combined
print sum_three_deep_dict_values(dicts)
这里的预期输出是{'a': {'b': {'c': 5, 'e': 3}}},目标是对两个字典具有相同键的值求和(例如这里的d[a][b][c]),并将任一字典中剩余的键值对包含在输出字典中。
有许多关于 SO 的问题似乎可以回答以下问题:“应该如何对嵌套字典的值求和”?然而,昨晚通读它们,我发现的每一个都涉及一些奇怪的特殊情况或参数,例如“组合/忽略第 n 层键”或“在特殊位置应用 if 条件”。因此,我想提出一个简单的问题:在 Python 中对双嵌套字典的值求和的最佳方法是什么?
【问题讨论】:
-
第一层和第二层可以有多个键吗?
-
哦,是的。我的实际密钥大小约为 100,000 ; 1,000,000;第一层、第二层和第三层(分别)为 100,000,000。
-
并且预期的输出是两层深度的字典,两层的键与原始字典相同,但最后一个值是第三层中值的总和?
-
预期输出是
{'a': {'b': {'c': 5, 'e': 3}}}吗? -
好的......另外,你目前的方法有什么问题?
标签: python dictionary