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

