Python中按学生姓名求最大登顶次数并生成排名的技术问询
问题描述
我有如下二维列表,记录了每位学生考试登顶的次数:
main_record = [ ['student1', 1], ['student2', 1], ['student2', 2], ['student1', 5], ['student3', 3] ]
还有一个包含所有唯一学生的列表:
students_enrolled = ['student1','student2','student3']
我希望基于学生的登顶次数最大值生成排名列表:
student_ranking = ['student1','student3','student2']
需要实现的逻辑等效于以下SQL查询:
select max(main_record[1]) where name = student1 >>> result = 5 select max(main_record[1]) where name = student2 >>> result = 2 select max(main_record[1]) where name = student3 >>> result = 3
请问哪些Python内置函数可以实现该需求?
解决方案
你可以通过以下几个Python内置函数组合实现需求:
1. 统计每位学生的最大登顶次数
先用dict()创建存储容器,结合max()和dict.get()来筛选每个学生的最高登顶次数:
# 初始化字典存储学生与对应最大登顶次数 max_records = {} for student, count in main_record: # 对比已有值和当前值,取最大值更新字典 max_records[student] = max(max_records.get(student, 0), count)
这里用到的内置函数:
dict():创建空字典用于存储学生-最大次数的键值对dict.get():安全获取字典中已有值,若学生不存在则返回默认值0max():比较两个数值,保留较大的那个作为当前学生的最大次数
2. 生成排名列表
用sorted()函数结合匿名lambda表达式,按最大登顶次数降序排序学生列表:
student_ranking = sorted(students_enrolled, key=lambda s: max_records[s], reverse=True)
这里用到的内置函数:
sorted():对列表进行排序,支持自定义排序规则lambda:匿名函数,快速定义排序时的取值逻辑(从字典中提取对应学生的最大次数)
运行上述代码后,student_ranking会得到目标结果['student1','student3','student2']。
内容的提问来源于stack exchange,提问作者jaykio77
相关产品推荐
相关产品推荐

