将文件中的列从高到低排序

时间:2015-04-23 03:24:10

标签: python file sorting text-files

我有一个文件,其中包含一组人员分数。每个人有3个分数。我只能显示该人的最高分。但是,我无法打印到python shell,降序排名最高。例如:

grails:
   web:
      url:
         converter: "hyphenated"

我希望它按照分数的降序排序。所以看起来应该是这样的:

class BookAuthorsController {

   def index() {
   }

}

到目前为止,我已创建此代码,但我不知道如何继续:



Persona    12
Personb    14
Personc    17
Persond    11




1 个答案:

答案 0 :(得分:3)

这很简单:

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)

NB:假定您的输入数据没有错误的数据和一般垃圾。如果您的输入数据是,那么您将需要进一步扩展它!

<强>输出:

$ 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