首页 > 解决方案 > 比较嵌套字典

问题描述

我想比较嵌套字典如下:

d = {'siteA': {'00000000': 3, '11111111': 4, '22222222': 5},
        'siteB': {'00000000': 1, '11111111': 2, '22222222': 5}}

e = {'siteA': {'00000000': 5}}

f = {'siteB': {'33333333': 10}}

g = {'siteC': {'00000000': 8}}

d是将用于与和e进行比较的完整字典总数。fg

如果e碰巧在siteA-00000000中找到,那么我希望两个值(在本例中为 3 和 5)加起来变成 8。

如果f未找到(在这种情况下是真的),我想将字典附加到d['siteB'].

如果g没有找到,想追加到d.

谢谢!

标签: pythondictionarycounter

解决方案


collections.Counter对于对字典中的值求和以及在它们不存在的地方添加键很有用。由于Counter是 的子类dict,因此不应破坏其他操作。除了一次性的转换成本外,它还高效且专为此类任务而设计。

from collections import Counter

# convert d to dictionary of Counter objects
d = {k: Counter(v) for k, v in d.items()}

# add items from e
for k, v in e.items():
    if k in d:
        d[k] += Counter(e[k])

# add item from f if not found
for k, v in f.items():
    if k not in d:
        d[k] += Counter(f[k])

# add item from g if not found
for k, v in g.items():
    if k not in d:
        d[k] = Counter(v)

结果:

print(d)

{'siteA': Counter({'00000000': 8, '11111111': 4, '22222222': 5}),
 'siteB': Counter({'00000000': 1, '11111111': 2, '22222222': 5}),
 'siteC': Counter({'00000000': 8})}

推荐阅读