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
相关产品推荐
相关产品推荐

