从文本文件中将Python中的平均值从最高到最低排序

时间:2015-03-01 13:14:26

标签: python sorting average

我试图按照从最高到最低的学生对班级的平均成绩进行排序。

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

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很陌生,我不确定我做错了什么,所以任何帮助指针都会非常感激,谢谢你提前!

1 个答案:

答案 0 :(得分:2)

你的平均代码有点混乱。首先创建您的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)