
本文介绍如何将两个等长的字典列表按位置一一配对,并使用字典联合操作符 |(Python 3.9+)或兼容方式合并每个对应字典,实现字段叠加,适用于文件元数据与ID批量关联等场景。
本文介绍如何将两个等长的字典列表按位置一一配对,并使用字典联合操作符 `|`(python 3.9+)或兼容方式合并每个对应字典,实现字段叠加,适用于文件元数据与id批量关联等场景。
在实际开发中,常需将结构一致、顺序对应的两个字典列表“横向拼接”——例如一组文件描述信息(类型、名称)与另一组独立生成的 ID 列表,需按索引严格对齐后合并为完整记录。Python 提供了简洁高效的解决方案。
✅ 推荐方法:字典联合操作符 |(Python 3.9+)
自 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
若运行环境为 Python 3.8 或更早,可使用以下任一替代方案:
-
解包合并(推荐):
result = [{**a, **b} for a, b in zip(d1, d2)] -
dict() 构造 + update()(显式但稍冗长):
result = [dict(a, **b) for a, b in zip(d1, d2)] # 仅当 b 中键均为字符串时安全
-
copy() + update()(最通用):
result = [a.copy().update(b) or a.copy() for a, b in zip(d1, d2)] # 注意:update() 返回 None,需 or 处理 # 更清晰写法: result = [] for a, b in zip(d1, d2): merged = a.copy() merged.update(b) result.append(merged)
? 注意事项
- ✅ 长度必须一致:zip() 会以最短列表为准截断,建议提前校验 len(d1) == len(d2),避免静默丢失数据;
- ⚠️ 键冲突处理:若 d1[i] 与 d2[i] 含相同键(如都含 'type'),d2[i] 的值将覆盖 d1[i] 的值(| 和 {**a, **b} 均遵循此规则);
- ? 浅拷贝限制:所有方法均为浅合并,嵌套字典/可变对象不会递归合并;
- ? 无副作用:原列表 d1 和 d2 中的字典均不受影响(| 和 {**a, **b} 均返回新字典)。
通过上述方法,你可高效、可读地完成多源字典列表的有序融合,特别适合 ETL 流程、API 响应组装及批量资源标记等典型任务。











