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

如何交替合并两个字典的键值对以生成新字典

交替合并两个字典的实现方案

核心思路

Python 3.7及以上版本的字典是插入有序的,我们可以先将两个字典的键值对转换成可迭代序列,交替取出两组序列中的元素,最后合并成新字典;若其中一个字典元素更多,剩余元素直接追加到末尾即可。

基础实现代码

借助itertools.zip_longest处理长度不同的序列,它会自动为较短序列补None,我们只需过滤掉None的情况:

from itertools import zip_longest

dict1 = {"zero":0,"two":2, "four":4, "six": 6, "eight":8,"ten":10}
dict2 = {"one":1,"three":3,"five":5,"seven":7, "nine":9}

dict3 = {}
for pair1, pair2 in zip_longest(dict1.items(), dict2.items()):
    if pair1:
        dict3[pair1[0]] = pair1[1]
    if pair2:
        dict3[pair2[0]] = pair2[1]

print(dict3)

运行结果:

{'zero': 0, 'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6, 'seven': 7, 'eight': 8, 'nine': 9, 'ten': 10}

兼容旧Python版本(3.6及以下)

3.7之前的普通字典是无序的,需用collections.OrderedDict保证顺序:

from itertools import zip_longest
from collections import OrderedDict

dict1 = OrderedDict({"zero":0,"two":2, "four":4, "six": 6, "eight":8,"ten":10})
dict2 = OrderedDict({"one":1,"three":3,"five":5,"seven":7, "nine":9})

dict3 = OrderedDict()
for pair1, pair2 in zip_longest(dict1.items(), dict2.items()):
    if pair1:
        dict3[pair1[0]] = pair1[1]
    if pair2:
        dict3[pair2[0]] = pair2[1]

# 按需转换成普通字典
print(dict(dict3))

简化写法(Python 3.9+)

利用生成器表达式构建键值对序列,一行完成合并:

from itertools import zip_longest

dict1 = {"zero":0,"two":2, "four":4, "six": 6, "eight":8,"ten":10}
dict2 = {"one":1,"three":3,"five":5,"seven":7, "nine":9}

dict3 = dict(
    item 
    for pairs in zip_longest(dict1.items(), dict2.items()) 
    for item in pairs 
    if item is not None
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:25:14