python - 使用缺少键值对更新嵌套字典
问题描述
我有一个具有唯一 id 的字典和与基数位置相对应的键值对的嵌套字典:
{'925328413719459770': {'N': 14,
'NNW': 116,
'NW': 38,
'S': 1,
'SE': 2,
'SSE': 1,
'W': 16,
'WNW': 146,
'WSW': 16}}
但是,并非所有嵌套的 dicts 都会包含 16 个可能的基数位置中的每一个:
cp = ["N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE",
"S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"]
与完整列表相比,我能够得到 dict 中的基数位置集之间的差异cp
for leg in legdict.values():
print(list(set(cp) - set(leg.keys())))
['ESE', 'SSW', 'NNE', 'NE', 'ENE', 'SW', 'E']
然后如何使用缺失的位置更新嵌套的字典并将它们的值设置为 0?输出将是这样的:
{'925328413719459770': {'N': 14,
'NNW': 116,
'NW': 38,
'S': 1,
'SE': 2,
'SSE': 1,
'W': 16,
'WNW': 146,
'WSW': 16,
'ESE': 0,
'SSW': 0,
'NNE': 0,
'NE': 0,
'ENE':0,
'SW': 0,
'E': 0 }}
有没有一种有效的方法在 python 中使用该update()
方法执行此操作,或者可以使用列表来更新字典,同时将该列表的所有元素设置为 0?实际legdict
非常大,因此任何有关有效方法的建议都将不胜感激。
解决方案
那这个呢:
cardinal_positions = [
"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE",
"S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"
]
def fill_missing_keys(the_huge_dict):
"""Fills in missing cardinal positions with 0"""
for inner_dict in the_huge_dict.values():
for key in cardinal_positions:
if key not in inner_dict:
inner_dict[key] = 0
应该相当有效,因为它不制作任何副本,它只是迭代所有内容并在必要时填充缺失的键。
作为一般规则,您应该始终首先使用最简单的解决方案。如果结果太慢,请稍后优化。
推荐阅读
- python - 在 docker 中运行的 python 应用程序和 postgres db 之间的连接有问题
- docker - 在 GitHub 操作中,如何覆盖服务的入口点?
- javascript - Alpaca JS 未正确重新排序数组复选框
- postgresql - Sequelize 关于设置时区和 client_min_messages 的默认查询
- deep-learning - 主干在神经网络中意味着什么?
- python - 将对象实例传递给 FastAPI 路由器
- javascript - 找出deltaY距离?
- html - 同一行的两个标题粘在一起 - Bootstrap
- javascript - 如何使用键多次将相同的方法应用于不同的数组元素?
- java - Java创建带参数的线程