【问题标题】:Sorting averages by highest to lowest in Python from text files从文本文件中按 Python 中从高到低对平均值进行排序
【发布时间】:2015-03-01 13:14:25
【问题描述】:

我正在尝试按学生从高到低对班级的平均分数进行排序。

到目前为止,这是我的代码:

with open("class.txt") as f:
    d = {}

    for line in f:
        column = line.split(":")
        names = column[0]
        scores = int(column[1].strip())

        count = 0
        while count < 3:
            d.setdefault(names, []).append(scores)
            count = count + 1
    for names, v in sorted(d.items()):
        average = (sum(v)/len(v))
        print(names,average)
    averages=[]
    averages.append(average)

我已经计算出平均值,但是我一直坚持如何按从高到低对这些平均值进行排序,这是我尝试过的

list = sorted(averages, key=lambda tup: tup[1], reverse=True)

但是,它给出了错误..

TypeError: 'float' object is not subscriptable

我还注意到它不仅仅计算最近三个分数的平均值,它计算出文本文件中学生所有分数的平均值,但是我希望它只计算最近三个分数每个学生的分数

我是 Python 的新手,我不确定我做错了什么,所以任何帮助指针将不胜感激,提前谢谢你!

【问题讨论】:

  • column[0][Click Here](null) ???
  • 是否允许让其他人编写您的 GCSE 考试代码?
  • @thefourtheye 哦,对了,抱歉,现在修好了.. 不知道是怎么到那里的

标签: python sorting average


【解决方案1】:

您的平均代码有点混乱。 首先创建您的averages 列表,然后将您计算的每个平均值附加到该列表:

averages=[]
for name, v in d.items():
    average = (sum(v)/len(v))
    averages.append((name, average))

这会生成一个 (name, average) 元组列表,然后您可以对其进行排序:

for name, average in sorted(averages, key=lambda a: a[1], reverse=True):
    print(name, average)

【讨论】:

  • 您是否知道我如何才能只计算每个学生最后三个分数的平均值,而不是文件中该学生所有分数的平均值?跨度>
  • v[-3:]从列表中获取最后3个,但在读取文件时删除while循环;您正在添加每个乐谱读取的 3 个副本。
  • @PythonFun:你有什么理由不接受我的回答?还缺什么吗?
  • 哦,没有任何遗漏,没有意识到我没有接受它,我再次接受了它,谢谢你的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 2020-09-04
  • 1970-01-01
  • 2016-08-26
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多