Python如何正确更新嵌套字典内的键值 避免新增冗余顶层键
问题原因
你使用的递归深度更新函数本身逻辑没有问题,错误来源于待更新的字典dict1结构和原字典的嵌套层级不匹配。
你要修改的set_params字段是嵌套在原字典的data_extraction节点下的,但你构造的dict1将set_params放在了最顶层,函数执行时找不到原字典顶层对应的set_params键,就会直接在顶层新增该键,自然不会修改到内层的目标字段。
解决方法
方法1:调整更新字典结构(推荐,保留递归合并能力)
把dict1的结构调整为和原字典的嵌套层级完全对齐,再调用原有更新函数即可:
# 调整后的更新字典,匹配原字典嵌套结构 dict1_fixed = { 'data_extraction': { 'set_params': { 'START_DT': "'201001'", 'END_DT': "'201004'" } } } # 调用你原来的更新函数 update(original, dict1_fixed)
这种方式的优势是支持局部字段合并,如果你只需要修改START_DT,不需要传入END_DT,原有字段值会保留不会被覆盖。
方法2:直接指定路径更新(适合已知明确嵌套路径的场景)
如果你确认要更新的路径固定,不需要通用的递归更新能力,直接赋值操作更简单:
场景A:合并更新set_params(保留原有未被覆盖的键)
original['data_extraction']['set_params'].update(dict1['set_params'])
场景B:完全替换整个set_params字典
original['data_extraction']['set_params'] = dict1['set_params']
内容的提问来源于stack exchange,提问作者Maths12
相关产品推荐
相关产品推荐

