Python实现嵌套字典相同值替换及合并的操作方法
Python嵌套字典合并实现
你需要的是以dict_2的值为高优先级,合并dict_1的独有条目,以下是对应实现:
固定层级场景实现(适配你给出的3层结构)
import copy dict_1 = { "AR": { "tom": {"q": 1.0}, "jerry": {"q": 1.0}, "spike": {"q": 1.0} }, "DB": { "goku": {"q": 1.0}, "vegeta": {"q": 2.0}, "gohan": {"q": 1.0}, "trunks": {"q": 1.0}, }, } dict_2 = { "AR": { "tom": {"q": 1.0} }, "DB": { "goku": {"q": 1.0} }, } # 以dict_2为基础初始化结果字典,深拷贝避免修改原dict_2 dict_3 = copy.deepcopy(dict_2) for first_key, second_dict in dict_1.items(): # 一级键不存在直接添加整组值 if first_key not in dict_3: dict_3[first_key] = second_dict continue # 一级键存在时仅补充不存在的二级键 for second_key, val in second_dict.items(): if second_key not in dict_3[first_key]: dict_3[first_key][second_key] = val
执行后dict_3的结构完全符合你要求的输出:
{ "AR": { "tom": {"q": 1.0}, "jerry": {"q": 1.0}, "spike": {"q": 1.0} }, "DB": { "goku": {"q": 1.0}, "vegeta": {"q": 2.0}, "gohan": {"q": 1.0}, "trunks": {"q": 1.0} } }
通用多层嵌套合并实现(适配任意深度嵌套字典)
如果后续你的字典嵌套层级有变化,可以用递归合并函数:
import copy def merge_priority_dict(priority_dict, add_dict): """ 合并两个嵌套字典,priority_dict的键值优先级更高,重复键保留其取值 add_dict中独有的键会补充到结果中 """ result = copy.deepcopy(priority_dict) for k, v in add_dict.items(): if k not in result: result[k] = v else: # 两者都是字典时递归合并 if isinstance(v, dict) and isinstance(result[k], dict): result[k] = merge_priority_dict(result[k], v) return result # 调用方法 dict_3 = merge_priority_dict(dict_2, dict_1)
内容的提问来源于stack exchange,提问作者Anubhav
相关产品推荐
相关产品推荐

