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

Python中修改嵌套字典键名的方法及键匹配报错解决方案

报错根因
  • 你的映射字典dn1的键为字符串类型(如'239'),但原嵌套字典中IO Data下子字典的键为整数类型(如239),Python中不同数据类型的键会被识别为不同对象,因此触发键不存在的报错。
修正方法

仅替换n1子字典键名

把dn1的键改为整数类型即可,同时建议用dict.get()避免未定义映射的键触发报错:

dn1 = {239: 'Ignition', 240: 'Movement', 80: 'Data Mode', 21: 'GSM Signal',
       200: 'Sleep Mode', 69: 'GNSS Status'}

dictionary1['IO Data']['n1'] = dict(
    (dn1.get(key, key), value) 
    for key, value in dictionary1['IO Data']['n1'].items()
)

批量替换所有IO子字典键名

如果需要同时处理n1/n2/n4等所有IO下的子字典,可以定义统一的映射表后遍历替换:

# 提前定义所有需要替换的数字键对应可读名称
full_io_map = {
    239: 'Ignition', 240: 'Movement', 80: 'Data Mode', 21: 'GSM Signal',
    200: 'Sleep Mode', 69: 'GNSS Status', 181: '自定义标识1', 182: '自定义标识2',
    66: '自定义标识3', 24: '自定义标识4', 67: '自定义标识5', 68: '自定义标识6',
    241: '自定义标识7', 16: '自定义标识8'
}

# 遍历替换所有IO子字典的键,直接修改原字典
for sub_dict in dictionary1['IO Data'].values():
    for old_key in list(sub_dict.keys()):
        new_key = full_io_map.get(old_key, old_key)
        if new_key != old_key:
            sub_dict[new_key] = sub_dict.pop(old_key)

内容的提问来源于stack exchange,提问作者Mickaël Brás Dias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:06:02