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

Python 3.10如何合并两个等长字典列表为对应键值组合的新列表

等长字典列表按位置合并实现方案

你的运行环境为Python v3.10.4,需求是将两个长度一致的字典列表,按索引位置将对应下标的两个字典合并为单个字典,最终组成新的IOC汇总列表。

推荐实现(适配Python 3.10环境)

Python 3.9及以上版本原生支持字典|运算符合并键值对,直接用zip()配对两个列表的同位置元素即可一行实现:

uniq = [
    {'uniq-name': '2022-06-26 14:21:25.298167'},
    {'uniq-name': '2022-06-26 14:21:25.298204'}
]
iocvalue = [
    {'value': '116.30.7.55'}, 
    {'value': '31.215.70.187'}
]

summary = [u | v for u, v in zip(uniq, iocvalue)]

运行得到的summary结构完全符合预期:

[
    {'uniq-name': '2022-06-26 14:21:25.298167', 'value': '116.30.7.55'},
    {'uniq-name': '2022-06-26 14:21:25.298204', 'value': '31.215.70.187'}
]

低版本兼容写法

如果后续需要在Python 3.9以下环境运行,可以用字典解包语法实现相同效果:

summary = [{**u, **v} for u, v in zip(uniq, iocvalue)]

之前尝试的写法错误原因

  • 列表拼接写法[{[val for val in uniq] + [ val for val in iocvalue]}]:只是把两个列表的所有字典元素简单拼接成一个新列表,没有做同位置配对;同时外层用{}包裹列表试图创建集合,但字典是不可哈希类型,无法存入集合,会直接抛出类型错误。
  • 直接解包列表的**uniq、**iocvalue写法:解包语法要求操作对象是存储键值对的字典类型,直接对列表使用解包会触发类型错误,无法运行。

注意:zip()默认会在两个列表长度不一致时,以更短的列表长度为界截断数据。如果你的业务场景要求两个列表必须严格等长避免数据遗漏,可以在执行合并前加长度校验,或者使用itertools.zip_longest补全缺失位置的键值。

内容的提问来源于stack exchange,提问作者linuxguy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:48:57