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

如何对存在部分键重叠的嵌套字典执行键值相加操作?

嵌套字典的键值相加实现方法

对于嵌套字典的键值相加,由于结构层级不固定,需要通过递归遍历来处理每个层级的键值:

实现思路

  1. 优先保留第一个字典(dict1)中的所有键值对;
  2. 遍历第二个字典(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:17:06