Python按公共主键合并多个嵌套字典的实现方法
错误原因
你写的推导式运行失败的核心原因是Python字典不支持+运算符做合并操作,+仅能用于列表、字符串、元组这类序列类型的拼接,直接对dict类型做加法会抛出TypeError: unsupported operand type(s) for +: 'dict' and 'dict'。
正确实现
你的场景满足两个前提:一是所有待合并字典的外层主键完全对齐(都是1-200),二是同外层主键下的内层子键没有重复,不会出现键值覆盖问题,直接按主键合并内层字典即可。
通用兼容写法(支持Python 3.5及以上所有版本)
把所有待合并的字典统一放到列表中管理,后续新增待合并字典时只需要修改列表即可,维护成本更低:
# 收纳所有待合并的外层字典 to_merge = [a, b, c, d] result = {} # 遍历所有外层主键 for key in range(1, 201): sub_dict = {} # 逐个合并同主键下的内层字典 for single_dict in to_merge: sub_dict.update(single_dict[key]) result[key] = sub_dict
如果偏好推导式的简洁写法,可以用下面的版本,输出结果完全一致:
to_merge = [a, b, c, d] result = { outer_k: {inner_k: inner_v for d in to_merge for inner_k, inner_v in d[outer_k].items()} for outer_k in a.keys() }
Python 3.9+ 简化写法
Python 3.9 为字典新增了|运算符用于快速合并,可以配合reduce写出更短的逻辑:
from functools import reduce import operator to_merge = [a, b, c, d] result = { k: reduce(operator.or_, (d[k] for d in to_merge)) for k in a.keys() }
验证说明
用你给出的示例数据运行上述代码,得到的结果和你预期的输出完全一致,即使存在类似字典d中主键2多了m子键的情况,也会被正常合并到结果中,不会丢失字段。
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

