如何将个人平均分与姓名存入字典并升序排列,提取前三高分至top列表
搞定平均分存储与前三名筛选的方案
嘿,我来帮你解决这个问题!咱们一步步来修改你的代码,先实现把姓名和对应平均分存入字典,再搞定平均分最高的前三名提取。
1. 把姓名和平均分存入字典
首先,我们需要在循环外面初始化一个空字典,然后每次计算完某个人的平均分后,就把姓名作为键、平均分作为值存进去。这里我用列表推导式简化了成绩转换的代码,比原来的循环更清爽:
import csv from statistics import mean # 初始化用来存姓名和平均分的字典 grade_averages = {} with open('grades.csv') as f: reader = csv.reader(f) for row in reader: name = row[0] # 把行里的成绩转换成整数列表 grades = [int(grade) for grade in row[1:]] average = mean(grades) # 存入字典 grade_averages[name] = average print(f'Average of {name} --> {average:.2f}')
2. 提取平均分最高的前三名存入top列表
接下来要从字典里找出最高分的前三名,我们可以对字典的键值对进行排序:排序依据是平均分(也就是每个键值对里的第二个元素),按降序排列,然后取前三个元素就好啦:
# 按平均分降序排序,取前三个元素 top = sorted(grade_averages.items(), key=lambda x: x[1], reverse=True)[:3] # 打印看看结果 print("\n平均分最高的前三名:") for rank, (name, avg) in enumerate(top, 1): print(f'第{rank}名:{name},平均分{avg:.2f}')
完整可运行代码
把两部分整合起来,完整代码如下,直接运行就能得到你要的结果:
import csv from statistics import mean grade_averages = {} with open('grades.csv') as f: reader = csv.reader(f) for row in reader: name = row[0] grades = [int(grade) for grade in row[1:]] average = mean(grades) grade_averages[name] = average print(f'Average of {name} --> {average:.2f}') # 获取平均分最高的前三名 top = sorted(grade_averages.items(), key=lambda x: x[1], reverse=True)[:3] print("\nTop 3 Students by Average Grade:") for idx, (name, avg) in enumerate(top, 1): print(f'{idx}. {name}: {avg:.2f}')
关键细节解释
grade_averages.items():返回字典里的所有键值对,格式是类似('张三', 92.5)的元组key=lambda x: x[1]:告诉排序函数,按照每个元组的第二个元素(也就是平均分)来排序reverse=True:让排序结果是降序,这样最高分排在最前面[:3]:通过切片操作,直接取排序后的前三个元素,就是我们要的前三名
内容的提问来源于stack exchange,提问作者Ali Zareei
相关产品推荐
相关产品推荐

