如何高效合并带有重叠键的嵌套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()) }
这里的逻辑拆解:
set(Dict1.keys()).union(Dict2.keys())获取所有外层UUID键(不管只在哪个字典里存在)- 用
**解包两个内层字典,空字典{}作为兜底(避免键不存在时报错) - 若Dict2和Dict1的内层字典有同名键,Dict2的键值会覆盖Dict1的,这是Python字典合并的默认行为。
额外说明
外层键是UUID类型完全不影响合并逻辑,和普通字符串/数字键的处理方式一致,不需要额外适配。
内容的提问来源于stack exchange,提问作者Prashant
相关产品推荐
相关产品推荐

