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

如何从含重复键的两个列表创建值为列表的字典?

如何将重复键的列表转换为值为列表的字典?

给定两个列表:

subject_id = [10030, 10030, 10250, 10510]
student_id = [55000, 55804, 55804, 55000]

使用dict(zip(subject_id, student_id))会因为重复键被覆盖,只能保留最后一个对应值:

{10030: 55804, 10250: 55804, 10510: 55000}

要实现重复键对应的值为列表,将所有匹配的student_id存入列表,得到如下结果:

{10030: [55000, 55804], 10250: [55804], 10510: [55000]}

可以用以下几种方法实现:

方法1:手动循环判断

最直观的实现方式,手动检查键是否存在,不存在则创建列表,存在则追加元素:

subject_id = [10030, 10030, 10250, 10510]
student_id = [55000, 55804, 55804, 55000]

my_dict = {}
for subj, stud in zip(subject_id, student_id):
    if subj in my_dict:
        my_dict[subj].append(stud)
    else:
        my_dict[subj] = [stud]

print(my_dict)

方法2:使用collections.defaultdict

借助collections模块的defaultdict,可以自动为不存在的键创建默认值(这里是空列表),简化代码:

from collections import defaultdict

subject_id = [10030, 10030, 10250, 10510]
student_id = [55000, 55804, 55804, 55000]

my_dict = defaultdict(list)
for subj, stud in zip(subject_id, student_id):
    my_dict[subj].append(stud)

# 可选:转换为普通字典
my_dict = dict(my_dict)
print(my_dict)

方法3:使用dict.setdefault

利用字典内置的setdefault方法,该方法会返回键对应的值,若键不存在则先设置默认值(空列表),再返回:

subject_id = [10030, 10030, 10250, 10510]
student_id = [55000, 55804, 55804, 55000]

my_dict = {}
for subj, stud in zip(subject_id, student_id):
    my_dict.setdefault(subj, []).append(stud)

print(my_dict)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:47:28