You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python嵌套字典键值匹配生成指定格式结果的实现方法

问题原因

你原来的代码触发KeyError有两个核心原因:

  • 直接用dict2[k]、dict3[k]做外层索引时,如果目标字典不存在对应外层键(比如dict3没有ZR这个外层键),会直接抛错,根本走不到后续的.get()逻辑
  • 你定义的dict1本身存在两处语法笔误,会导致遍历结果不符合预期:
    • BR对应的列表里'tr'和'fs'之间漏写逗号,Python会自动把两个字符串拼接成'trfs'
    • ZR对应的值开头多写了'[,导致ZR的取值不是合法的元素列表,会出现字符串和列表拼接的错误结构
实现代码

先修正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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:36:18