python - 比较嵌套字典
问题描述
我想比较嵌套字典如下:
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
进行比较的完整字典总数。f
g
如果e
碰巧在siteA-00000000中找到,那么我希望两个值(在本例中为 3 和 5)加起来变成 8。
如果f
未找到(在这种情况下是真的),我想将字典附加到d['siteB']
.
如果g
没有找到,想追加到d
.
谢谢!
解决方案
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})}
推荐阅读
- c# - c# 转到文本文件中的特定行然后跳过几行并编辑
- javascript - 反应 JVectorMap 标记
- css - Material UI - 面临对齐网格以向右浮动的问题
- python - 尝试在 Pyspark 中实现 Holt-Winters 指数平滑时出错
- angular - 如果更改超过一千英尺,则获取地理位置
- angular - 如何知道我选择了哪个文档 [mongodb]
- highcharts - 如何在xAxis中具有不同数据时间的同一图表中绘制两个系列
- php - Symfony 4以表单类型获取当前用户?
- digital-ocean - rclone 将文件夹移动到 digitalocean 空间中的文件夹
- grep - SH grep 仅输出某些字符串