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

Python中为字典已有键扩展值:处理成绩列表生成目标字典

解决字典键关联多组值的问题

嗨,我来帮你搞定这个问题!你遇到的核心问题是:直接给字典键赋值会覆盖掉之前的内容,而且你尝试的dict1.extend用法不对——字典本身没有extend方法,得针对字典里的列表来操作才行。

下面给你两种可行的解决方案,都能得到你想要的结果:

方法1:手动判断键是否存在(无需额外模块)

这种方法适合不想引入额外库的场景,逻辑清晰直观:

Marks =[ [12345,75,'English'], [23452,83,'Physics'], [23560,81,'Statistics'], [23415,61,'Computer'], [23459,90,'Physics'], [12345,75,'Computer'], [23452,100,'Statistics'] ]

# 初始化空字典
course_scores = {}

for item in Marks:
    # 解构子列表,让代码更易读
    student_id, score, course_name = item
    # 如果课程名不在字典里,先创建一个空列表作为值
    if course_name not in course_scores:
        course_scores[course_name] = []
    # 将当前学生的ID和分数作为列表追加到对应课程的列表中
    course_scores[course_name].append([student_id, score])

print(course_scores)

运行这段代码后,就能得到你期望的结果:

{
    'English': [[12345, 75]],
    'Physics': [[23452, 83], [23459, 90]],
    'Statistics': [[23560, 81], [23452, 100]],
    'Computer': [[23415, 61], [12345, 75]]
}

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

Python的collections模块里的defaultdict可以自动为不存在的键创建默认值(这里我们指定默认值为列表),省去手动判断的步骤:

from collections import defaultdict

Marks =[ [12345,75,'English'], [23452,83,'Physics'], [23560,81,'Statistics'], [23415,61,'Computer'], [23459,90,'Physics'], [12345,75,'Computer'], [23452,100,'Statistics'] ]

# 初始化一个默认值为列表的字典
course_scores = defaultdict(list)

for student_id, score, course_name in Marks:
    # 直接追加即可,不存在的键会自动创建空列表
    course_scores[course_name].append([student_id, score])

# 可选:如果需要转换成普通字典(不是必须的,defaultdict本身也可以正常使用)
course_scores = dict(course_scores)

print(course_scores)

为什么你之前的方法不行?

  • 你最初的dict1[i[2]]=i[0],i[1]会把值设成元组,而且每次赋值都会覆盖之前的内容,所以最后每个键只保留了最后一组数据。
  • 你尝试的dict1.extend是错误的,因为字典对象没有extend方法——extend是列表的方法,你应该对字典中对应键的列表调用append或extend,但前提是这个键已经关联了一个列表,否则会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:11:43