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

使用for循环调用.items()时嵌套字典抛出KeyError问题排查

解决嵌套字典循环的KeyError问题

问题根源

你遇到的KeyError是因为遍历层级搞错了:line_params的顶层键是star1、star2这类恒星对象,而非Mg_II、C_I这类谱线名称。直接用for line, params in line_params.items()会把恒星对应的谱线字典赋值给params,此时params里没有center这类键,自然抛出错误。

修正示例

假设你的嵌套字典结构如下:

line_params = {
    'star1': {
        'Mg_II': {'center': 2800.0, 'continuum_range': [2780, 2820]},
        'C_I': {'center': 1560.0, 'continuum_range': [1540, 1580]}
    },
    'star2': {
        'Mg_II': {'center': 2802.5, 'continuum_range': [2775, 2825]},
        'C_I': {'center': 1561.2, 'continuum_range': [1538, 1582]}
    }
}

错误写法(触发KeyError)

# 错误:把顶层的恒星对象当成了谱线遍历
for line, params in line_params.items():
    print(params['center'])  # params是恒星的谱线字典,没有'center'键

正确嵌套循环

# 先遍历恒星,再遍历每个恒星下的谱线
for star, line_dict in line_params.items():
    print(f"处理恒星:{star}")
    for line, params in line_dict.items():
        center = params['center']
        cont_range = params['continuum_range']
        print(f"  谱线{line}:中心波长{center},连续谱范围{cont_range}")

额外排查建议

  • 确认字典层级:用print(line_params)或pprint.pprint(line_params)(需导入pprint模块)打印完整结构,明确每一层的键名称
  • 检查键名拼写:确保循环中调用的键(如center、Mg_II)和字典中的键完全一致,注意大小写、下划线等细节
  • 容错处理:如果不确定键是否存在,用params.get('center', None)替代直接索引,避免抛出KeyError

内容的提问来源于stack exchange,提问作者Sophia Lopez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:28:25