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

如何将含重复键的两个列表合并为单键多值的Python字典?

如何将重复键的对应值合并为列表来构建字典?

我懂你的痛点——用zip()直接转字典的时候,重复的键会被最后一个值覆盖,这确实不是你想要的效果。不过有几种简单的方法可以帮你把相同键的所有值都收集到列表里,实现目标格式的字典。

方法1:手动循环判断(适合理解原理)

最直观的方式就是初始化一个空字典,然后遍历每一对键值,手动处理列表的创建和追加:

list1 = ['sys_time', 'sys_time', 'sys_time']
list2 = ['2018-03-16T11:00:00.000-07:00', '2018-03-12T00:00:00.000-07:00', '2018-03-14T00:00:00.000-07:00']

result = {}
for key, value in zip(list1, list2):
    # 如果键不在字典里,先创建一个空列表
    if key not in result:
        result[key] = []
    # 把当前值追加到对应的列表里
    result[key].append(value)

print(result)

执行后就会得到你想要的结果:

{'sys_time': ['2018-03-16T11:00:00.000-07:00', '2018-03-12T00:00:00.000-07:00', '2018-03-14T00:00:00.000-07:00']}

方法2:使用collections.defaultdict(简洁高效)

Python标准库的collections模块里的defaultdict专门解决这种问题——它会自动为不存在的键创建指定类型的默认值(这里是列表),代码会更简洁:

from collections import defaultdict

list1 = ['sys_time', 'sys_time', 'sys_time']
list2 = ['2018-03-16T11:00:00.000-07:00', '2018-03-12T00:00:00.000-07:00', '2018-03-14T00:00:00.000-07:00']

# 初始化一个默认值为列表的字典
result = defaultdict(list)
for key, value in zip(list1, list2):
    # 直接追加值就行,不用判断键是否存在
    result[key].append(value)

# 可选:如果需要转换成普通的dict类型
result = dict(result)

print(result)

方法3:使用dict.setdefault()(紧凑写法)

dict自带的setdefault()方法也能实现类似效果,它会返回键对应的值(如果键不存在就先设置默认值再返回),可以链式调用append():

list1 = ['sys_time', 'sys_time', 'sys_time']
list2 = ['2018-03-16T11:00:00.000-07:00', '2018-03-12T00:00:00.000-07:00', '2018-03-14T00:00:00.000-07:00']

result = {}
for key, value in zip(list1, list2):
    # 不存在的键会自动创建空列表,然后追加值
    result.setdefault(key, []).append(value)

print(result)

这三种方法都能达到你的需求,其中defaultdict的写法最简洁高效,适合日常开发使用;手动循环的方式则更适合理解背后的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:15:35