Python嵌套字典键值匹配生成指定格式结果的实现方法
问题原因
你原来的代码触发KeyError有两个核心原因:
- 直接用
dict2[k]、dict3[k]做外层索引时,如果目标字典不存在对应外层键(比如dict3没有ZR这个外层键),会直接抛错,根本走不到后续的.get()逻辑 - 你定义的
dict1本身存在两处语法笔误,会导致遍历结果不符合预期:- BR对应的列表里
'tr'和'fs'之间漏写逗号,Python会自动把两个字符串拼接成'trfs' - ZR对应的值开头多写了
'[,导致ZR的取值不是合法的元素列表,会出现字符串和列表拼接的错误结构
- BR对应的列表里
实现代码
先修正dict1的笔误,再对外层键的取值也加缺省处理即可,完整代码如下:
# 修正笔误后的基准字典 dict1 = {'AM': ['tv', 'rs', 'pq', 'MN', 'tN', 'tq', 'OP', 'tP', 'QR', 'tr','fs','nz','tz','dz'], 'BR': ['tv', 'rs', 'pq', 'MN', 'tN', 'tq', 'OP', 'tP', 'QR', 'tr','fs','nz','tz','dz'], 'ZR': ['tv', 'rs', 'pq', 'MN', 'tN', 'tq', 'OP', 'tP', 'QR', 'tr','fs','nz','tz','dz']} dict2 = {'AM':{'pq':1.2,'rs':2.41,'tv':3.81},'BR':{'MN':1.3,'OP':1.41,'QR':1.81},'ZR': {'fs':1.2,'nz':1.5,'tz':1.7,'dz':1.3}} dict3 = {'AM':{'tq':1.3,'rs':1.41,'tv':2.41},'BR':{'tN':1.8,'tP':1.81,'tr':1.42}} out = {} for outer_key, elem_list in dict1.items(): # 先获取两个字典对应外层键的子字典,不存在则返回空字典,避免KeyError sub2 = dict2.get(outer_key, {}) sub3 = dict3.get(outer_key, {}) for elem in elem_list: out[f"{outer_key}-{elem}"] = ( sub2.get(elem, 'sert'), sub3.get(elem, 'sert') )
逻辑说明
- 对外层键也使用
.get(键, 默认值)方法取值,就算目标字典不存在对应外层键,也会返回提前设置的空字典,不会触发键不存在的错误 - 空字典调用
.get()查找任意键都会返回设置的缺省值'sert',完全匹配需求里的缺失填充规则 - 修正
dict1的笔误后,遍历的元素列表和预期完全一致,不会出现错误键名
内容的提问来源于stack exchange,提问作者Noorulain Islam
相关产品推荐
相关产品推荐

