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

Python如何合并两个字典使对应键值组成列表的列表嵌套结构

Python字典按Key合并对应值为二维列表

问题复现

现有两个键完全对应的字典:

dd = {1: [10, 15], 5: [10, 20, 27], 3: [7]}
dd1 = {1: [1, 4], 5: [2, 5, 6], 3: [3]}

目标是把两个字典同Key的列表整合成平级的二维列表,最终得到:

dd = {1: [[10, 15],[1, 4]], 5: [[10, 20, 27],[2, 5, 6]], 3: [[7],[3]]}

之前尝试的写法无法得到正确结果:

for dictionary in (dd, dd1):
    for key, value in dictionary.items():
        dd[key].append([value])

该写法的问题是直接在原dd的列表上做追加操作,还会先遍历dd自身把原有值嵌套塞回列表,最终得到的是多层嵌套的混乱结构,不是两个原列表平级组成二维列表的效果。

最简实现

两个字典键完全对齐的场景下,用字典推导式一行就能搞定:

dd = {k: [origin_val, dd1[k]] for k, origin_val in dd.items()}

执行后dd的结构和预期完全一致。

如果需要兼容两个字典键不完全匹配的场景(存在某个键只在单个字典中出现),可以先取所有键的并集,缺失值默认补空列表:

# 取两个字典所有键的并集
common_keys = dd.keys() | dd1.keys()
dd = {k: [dd.get(k, []), dd1.get(k, [])] for k in common_keys}

原代码错误说明

原写法的执行逻辑完全不符合预期,核心问题有两个:

  • 遍历的元组第一个元素就是原dd本身,第一轮循环就会把dd自身的value包一层列表追加到原列表里,直接破坏原始数据,比如key=1的列表会从[10,15]变成[10,15, [[10,15]]]
  • 第二轮遍历dd1时,又会把dd1的value包一层列表追加到已经被破坏的原列表末尾,最终得到的是三层嵌套的混乱结构,不可能得到两个原列表平级的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:18:21