python - 有没有办法从嵌套字典中访问一个值并根据搜索列表更新同一个字典中的值?
问题描述
dict_1 = {'key1': {'Type': '51', 'dn_range': 203, 'soft_DN': nan}}
{'key2': {'Type': '51', 'dn_range': 204, 'soft_DN': nan}}
A_list = [2031111, 2031112, 2031113, 2042222, 2042223]
我的目标是搜索 A_list 以找到以 203 和 204 开头的第一个整数(2031111 和 2042222)并更新相应的 soft_DN 值。
更新后的 dict 应如下所示:
dict_1 = {'key1': {'Type': '51', 'dn_range': 203, 'soft_DN': 2031111}}
{'key2': {'Type': '51', 'dn_range': 204, 'soft_DN': 2042222}}
解决方案
首先你的 dict 格式不正确,我想它应该是这样的:
dict_1 = {'key1': {'Type': '51', 'dn_range': 203, 'soft_DN': None},
'key2': {'Type': '51', 'dn_range': 204, 'soft_DN': None}}
这样做的简单方法是将数字转换为字符串,然后将前 3 个字符与dn_range
>>> int(str(2031111)[:3])
203
也就是说,我不知道您的数据集有多大,如果它非常大,您希望通过减少在迭代字典时循环列表的次数来节省时间。为此,我建议使用itertools.groupby
获取键的字典作为整数的前 3 位数字,而值是显示的第一个整数。也就是说,请确保您的整数按前 3 个字符组合在一起,否则您将需要另一种方法来执行此操作。
from itertools import groupby
ranges = {int(k): next(v) for k, v in groupby(A_list, key=lambda i: str(i)[:3])}
结果:
{203: 2031111, 204: 2042222}
然后只需遍历字典并替换值
for k, d in dict_1.items():
d['soft_DN'] = ranges.get(d['dn_range'])
结果:
{'key1': {'Type': '51', 'dn_range': 203, 'soft_DN': 2031111}, 'key2': {'Type': '51', 'dn_range': 204, 'soft_DN': 2042222}}
推荐阅读
- javascript - 决定引导粘性导航栏应该向下多远
- numpy - 如何索引 3d 数组
- javascript - 如何使用 Handlebars.js 在nest.js 中设置默认布局?
- android - 为 Flutter/React-Native/Android-Native 应用程序生成 SHA-1
- watermark - PHPWord生成的带有0边距的docx水印图像从文档的左边缘和上边缘移动了一些空间
- python - 如何使用 pipenv 冻结需求?
- excel - Excel 2013 日期时差
- javascript - 在chartjs栏中合并两个具有不同键的对象
- html - 用于自动化网站的 Excel vba
- javascript - 返回不包括特定范围的随机数 - javascript