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

如何将个人平均分与姓名存入字典并升序排列,提取前三高分至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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:50:59