我试图按照从最高到最低的学生对班级的平均成绩进行排序。
到目前为止,这是我的代码:
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很陌生,我不确定我做错了什么,所以任何帮助指针都会非常感激,谢谢你提前!
答案 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)