对导入的文本文件进行排序?

时间:2015-06-20 23:02:38

标签: python sorting

所以我已经将文本文件导入python。该文件是存储用户名和分数的数据库。它目前的打印格式与原始文件几乎相同。我将每一行分为两部分:名称和分数。我已设法按字母顺序对数据进行排序,现在我正在尝试从最高到最低排序,但不知道如何?

file = open("classj.txt")
classj = (file.readlines())
for line in sorted(classj):
    classj = (line.rstrip())
    classa = (classj.split("-"))
    score = (classa[1])
    name = (classa[0])
    print(name,"-",score)

输出:

EMILY - 7
JEMMA - 9
LEO - 6
MARCO - 8
RILEY - 5

如何使代码对文件进行排序以便首先显示最高分(JEMMA),最后显示最低分(RILEY)?

3 个答案:

答案 0 :(得分:1)

将数据作为元组放在列表中。然后按分数降序排列。

file = open("classj.txt")
classj = (file.readlines())
s = []
for line in sorted(classj):
    classj = (line.rstrip())
    classa = (classj.split("-"))
    score = int(classa[1])
    name = (classa[0])
    s.append( (name,score) )
s.sort(reverse=True, key=lambda x:x[1])
for x in s:
    print(x[0],"-",x[1])

答案 1 :(得分:0)

首先,您可以创建文件中所有名称/分数对的元组列表(名称,分数)。然后,您可以对列表使用sorted()函数:

import operator

ns_pairs = {"Emily": 7, "Jemma": 9, "Leo": 6, "Marco":8, "Riley": 5}
sorted_ns_pairs = sorted(ns_pairs.items(), key=operator.itemgetter(1), reverse=True)

这是预定义列表中的示例。您显然希望通过将文件中的名称/分数读入列表来创建列表(如ns_pairs)。希望这有帮助!

答案 2 :(得分:0)

使用[x.strip().split('-') for x in open("classj.txt")]构建列表的名称和分数对,并按降序对其进行排序。

from operator import itemgetter
for name,score in sorted((x.strip().split('-') for x in open("classj.txt")),key=itemgetter(1),reverse=True):
    print(name + '-' + score)