我有一个包含一组人的分数的文件。每人有3分。我只能显示该人的最高分。但是,我无法打印到 python shell,最高分按降序排列。例如:
Persona 12
Personb 14
Personc 17
Persond 11
我希望它按分数降序排序。所以它应该看起来像:
personc 17
personb 14
persona 12
persond 11
到目前为止,我已经创建了这段代码,但我不知道如何继续:
with open("class.txt","r") as file:
lines = file.readlines()
with open('class.txt','w') as fileout:
for line in lines:
fields = line.split()
name, grades = fields[0], fields[1:]
grades = [int(grade) for grade in grades]
grades.sort()
highest = str(max(grades))
grades = [str(highest) for grade in grades]
rows = filter(None, [line.strip().split() for line in open("file.txt", "r")])
data = [(name, int(highest)) for name, highest in rows]
for name, highest in sorted(data, key=itemgetter(1)):
print("{0:s} {1:d}".format(person, score))
最佳答案
这很简单:
from operator import itemgetter
rows = filter(None, [line.strip().split() for line in open("data", "r")])
data = [(person, int(score)) for person, score in rows]
for person, score in sorted(data, key=itemgetter(1), reverse=True):
print "{0:s} {1:d}".format(person, score)
注意:这假设您的输入数据不存在错误数据和一般垃圾。如果您的输入数据不干净,您将不得不进一步扩展它!
输出:
$ python test_data.py
Personc 17
Personb 14
Persona 12
Persond 11
更新:
如果您的数据中有垃圾,就像您在评论中描述的那样。
$ cat data
Persona 12 foo
Personb 14 bar
Personc 17 baz
Persond 11
那么上面的程序就必须使用自定义key
稍微修改一下,例如:
def sortkey(row):
return int(row[1])
rows = filter(None, [line.strip().split() for line in open("data", "r")])
for row in sorted(rows, key=sortkey, reverse=True):
print "{0:s} {1:s}".format(row[0], row[1])
仍然会产生相同的输出:
$ python test_data.py
Personc 17
Personb 14
Persona 12
Persond 11
关于python - 将文件中的列从高到低排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29813087/