如何对存在部分键重叠的嵌套字典执行键值相加操作?
嵌套字典的键值相加实现方法
对于嵌套字典的键值相加,由于结构层级不固定,需要通过递归遍历来处理每个层级的键值:
实现思路
- 优先保留第一个字典(dict1)中的所有键值对;
- 遍历第二个字典(dict2)的每个键:
- 如果键在dict1中存在,且对应的值都是字典,则递归调用相加逻辑处理嵌套内容;
- 如果键在dict1中存在,且对应的值是可相加的数值类型(如int、float),则直接将两个值相加;
- 如果键在dict1中不存在,则将dict2的键值对直接加入结果。
代码实现
def add_nested_dicts(d1, d2): # 复制d1的所有内容作为初始结果 result = d1.copy() for key, value in d2.items(): if key in result: # 若两者都是字典,递归处理嵌套结构 if isinstance(result[key], dict) and isinstance(value, dict): result[key] = add_nested_dicts(result[key], value) # 若都是可相加的数值类型,直接相加 elif isinstance(result[key], (int, float)) and isinstance(value, (int, float)): result[key] += value else: # 若d1中无此键,直接添加d2的键值对 result[key] = value return result # 示例数据 dict1 = { 'A': {'a': 1}, 'B': 2, 'C': {'c': 3}, 'D': {'d': {'dd': 4}} } dict2 = { 'A': {'a': 1}, 'D': {'d': {'dd': 4}} } # 执行相加操作 merged_dict = add_nested_dicts(dict1, dict2) print("dict1 + dict2 =", merged_dict)
输出结果
dict1 + dict2 = {'A': {'a': 2}, 'B': 2, 'C': {'c': 3}, 'D': {'d': {'dd': 8}}}
补充说明
- 该函数支持任意层级的嵌套字典相加,只要对应层级的数值是可相加的类型;
- 如果需要处理更多数值类型(如复数),可以扩展
isinstance的判断范围; - 若要避免修改原字典
dict1,可以在函数内部使用深拷贝(copy.deepcopy(d1))代替浅拷贝,不过对于示例中的简单结构,浅拷贝已足够。
内容的提问来源于stack exchange,提问作者itamar kanter
相关产品推荐
相关产品推荐

