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

Python基于预设映射修改嵌套字典键名及KeyError问题解决

报错原因

  • 你初始化的new_dict是空字典,没有预先创建new_dict['Company1']对应的内层字典结构,直接对new_dict['Company1'][j]赋值会触发KeyError
  • 两层嵌套for循环逻辑错误,你需要的是comparison_list和new_prods的元素按位置一一对应转换,两层循环会把每个旧键的值赋给所有新键,最终结果会被后执行的赋值覆盖
  • 代码中用到的test变量未定义,存储原始数据的变量实际为old_dict

正确实现代码

首先通过zip构建旧键到新键的一一映射,再逐层遍历字典完成转换:

comparison_list = ['Old_item1', 'Old_item2']
new_prods = ['New_item1', 'New_item2']
# 构建旧→新键的映射关系
key_map = dict(zip(comparison_list, new_prods))

old_dict = {
    'Company1':
        {
            'Old_item1':
                {
                    'key1': 'val',
                    'key2': 'val'
                },
            'Old_item2':
                {
                    'key1': 'val',
                    'key2': 'val'
                }
        }
}

new_dict = {}
# 遍历外层公司键,兼容外层有多个公司的场景
for company, inner_items in old_dict.items():
    new_dict[company] = {}
    for old_key, value in inner_items.items():
        # 仅转换匹配到的旧键
        if old_key in key_map:
            new_dict[company][key_map[old_key]] = value

# 若需要和你给出的期望输出一致,仅保留New_item1对应的数据,加下面这行即可
# new_dict['Company1'] = {'New_item1': new_dict['Company1']['New_item1']}

运行输出

默认会生成两个转换后的内层键,结构如下:

new_dict = {
    'Company1':
        {
            'New_item1':
                {
                    'key1': 'val',
                    'key2': 'val'
                },
            'New_item2':
                {
                    'key1': 'val',
                    'key2': 'val'
                }
        }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:15:08