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

如何高效合并带有重叠键的嵌套Python字典?

合并嵌套UUID键字典的高效实现

这是个很常见的嵌套字典合并需求,我给你几个实用且高效的实现方案,你可以根据数据规模和代码风格偏好来选择:

方法1:基础遍历更新(性能最优)

如果你的字典规模较大,这种方法的性能是最好的——它直接调用Python字典底层的copy()和update()方法,内存效率高且逻辑清晰:

import uuid
from datetime import date

# 你的原始数据
Dict1 = {
    uuid.UUID('id1'): {
        'due': date(2018, 3, 10),
        'status': 'Done',
    },
    uuid.UUID('id2'): {
        'due_date': date(2018, 3, 10),
        'old_status': 'Done',
    }
}

Dict2 = {
    uuid.UUID('id1'): {
        'new_val': 'Pass',
        'amount': 123.0,
    },
    uuid.UUID('id2'): {
        'new_val': 'Fail',
        'amount': 0,
    }
}

merged = {}
# 先复制Dict1的所有内层字典(避免修改原数据)
for key, inner_dict in Dict1.items():
    merged[key] = inner_dict.copy()
# 遍历Dict2,更新已有键的内层字典,新增不存在的键
for key, inner_dict in Dict2.items():
    if key in merged:
        merged[key].update(inner_dict)
    else:
        merged[key] = inner_dict.copy()

要是需要处理重复键的特殊逻辑(比如保留所有重复值而非覆盖),直接在遍历过程中修改即可,扩展性很强。

方法2:字典推导式(代码最简洁)

如果数据规模不大,想让代码更紧凑,可以用字典解包的方式一行搞定:

merged = {
    key: {**Dict1.get(key, {}), **Dict2.get(key, {})}
    for key in set(Dict1.keys()).union(Dict2.keys())
}

这里的逻辑拆解:

  1. set(Dict1.keys()).union(Dict2.keys())获取所有外层UUID键(不管只在哪个字典里存在)
  2. 用**解包两个内层字典,空字典{}作为兜底(避免键不存在时报错)
  3. 若Dict2和Dict1的内层字典有同名键,Dict2的键值会覆盖Dict1的,这是Python字典合并的默认行为。

额外说明

外层键是UUID类型完全不影响合并逻辑,和普通字符串/数字键的处理方式一致,不需要额外适配。

内容的提问来源于stack exchange,提问作者Prashant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:00:02