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

如何获取列表中元组/列表元素的索引及嵌套字典成绩访问问题

Alright, let's tackle your two Python questions one by one—with concrete examples to make everything clear:

1. 获取列表中元组/子列表元素的索引

Depending on whether you need the first matching index or all matching indices, here are the common approaches:

找第一个匹配的元素索引

If you have a list of tuples/sublists and want the index of the first element containing a specific value (or matching a specific position), use enumerate() to loop through while tracking positions:

# 示例:包含元组的列表
student_list = [('UGM2018001', 'Alice'), ('UGM2018002', 'Bob'), ('UGM2018003', 'Charlie')]

# 查找第一个名字为Bob的元组索引
target_name = "Bob"
for idx, (stu_id, name) in enumerate(student_list):
    if name == target_name:
        print(f"索引: {idx}")
        break
# 输出: 索引: 1

如果你只需要检查目标值是否存在于元组/子列表的任意位置(不限制具体索引),可以调整判断条件:

for idx, item in enumerate(student_list):
    if target_name in item:
        print(f"索引: {idx}")
        break

找所有匹配的元素索引

要收集所有符合条件的元组/子列表的索引,可以用列表推导式:

target_stu_id = "UGM2018001"
matching_indices = [idx for idx, (stu_id, _) in enumerate(student_list) if stu_id == target_stu_id]
print(matching_indices)
# 输出: [0]
2. 构建嵌套字典并解决成绩访问问题

首先假设你的Stu_det列表结构如下(如果和你的实际数据不符,可自行调整):

Stu_det = [
    ('UGM2018001', 'MA101', 'Calculus', 'AB'),
    ('UGM2018001', 'PH101', 'Physics', 'B'),
    ('UGM2018002', 'MA101', 'Calculus', 'A'),
    ('UGM2018002', 'CH101', 'Chemistry', 'BC')
]

步骤1:正确构建嵌套字典

用循环构建字典会更直观,也便于调试:

student_course_dict = {}

for entry in Stu_det:
    stu_id, course_code, course_name, grade = entry
    # 如果学生不在外层字典中,先创建对应的内层空字典
    if stu_id not in student_course_dict:
        student_course_dict[stu_id] = {}
    # 添加课程信息:键为课程代码,值为(课程名称, 成绩)元组
    student_course_dict[stu_id][course_code] = (course_name, grade)

最终生成的字典结构如下:

{
    'UGM2018001': {
        'MA101': ('Calculus', 'AB'),
        'PH101': ('Physics', 'B')
    },
    'UGM2018002': {
        'MA101': ('Calculus', 'A'),
        'CH101': ('Chemistry', 'BC')
    }
}

步骤2:正确访问成绩

要获取某个学生某门课的成绩,只需按层级用方括号索引即可:

# 获取UGM2018001的MA101课程成绩
grade = student_course_dict['UGM2018001']['MA101'][1]
print(grade)  # 输出: AB

# 获取课程名称则取元组的第0位
course_name = student_course_dict['UGM2018001']['MA101'][0]
print(course_name)  # 输出: Calculus

常见访问问题的解决方法

如果访问成绩时出错,大概率是以下两种情况:

  • 键不存在:不确定学生/课程是否存在时,用get()方法避免KeyError:
    # 安全访问,若学生或课程不存在则返回None
    grade = student_course_dict.get('UGM2018001', {}).get('MA102', (None, None))[1]
    print(grade)  # 输出: None
    
  • 元组顺序错误:检查构建字典时是否把成绩放在了元组的第二位,如果顺序搞反了,调整访问索引即可(比如用[0]取成绩)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:08:55