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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:15:37