
本文介绍在 Python 中将两个等长的字典列表按索引位置逐项合并的方法,利用字典联合运算符 |(Python 3.9+)或兼容性更强的 ** 解包方式,实现结构化数据的精准配对与融合。
本文介绍在 python 中将两个等长的字典列表按索引位置逐项合并的方法,利用字典联合运算符 `|`(python 3.9+)或兼容性更强的 `**` 解包方式,实现结构化数据的精准配对与融合。
在实际开发中,常遇到需将多个来源的结构化数据(如元信息与标识符)按顺序关联的场景。例如,你有一组文件元数据列表和一组对应的 ID 列表,目标是为每个文件字典注入其唯一 ID 字段。关键在于保持索引对齐,并安全合并字典。
最简洁、推荐的方式(适用于 Python ≥ 3.9)是使用字典联合运算符 | 配合 zip():
d1 = [
{'type': 'excel_macro', 'Name': 'Nuevo Diseño de Registro de nominas.xlsm'},
{'type': 'pdf', 'Name': 'Presentación oferta comercial Nómina.pdf'}
]
d2 = [{'id': 35630898}, {'id': 35630899}]
result = [a | b for a, b in zip(d1, d2)]
print(result)
# 输出:
# [{'type': 'excel_macro', 'Name': 'Nuevo Diseño de Registro de nominas.xlsm', 'id': 35630898},
# {'type': 'pdf', 'Name': 'Presentación oferta comercial Nómina.pdf', 'id': 35630899}]
该写法清晰、高效,且 | 运算符会创建新字典(不修改原字典),符合函数式编程习惯。
⚠️ 注意事项:
- 若使用 Python
- 确保两列表长度一致,否则 zip() 会截断至较短者长度——建议提前校验:if len(d1) != len(d2): raise ValueError("Lists must have same length");
- 若字典存在同名键(如 d1[i] 和 d2[i] 均含 'type'),b 中的值将覆盖 a 中的值(| 和 {**a, **b} 均遵循“后者优先”原则);
- 如需深度合并(嵌套字典)或冲突键自定义处理逻辑,则需借助 deepmerge 等第三方库或手动递归实现。
总结:按序合并字典列表的核心是“对齐 + 合并”,zip() 提供索引同步,| 或 {**a, **b} 实现键值融合。选择方案时请兼顾 Python 版本与业务健壮性要求。











