2015-06-20 44 views
2

所以我已经将一个文本文件导入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 

任何想法如何使代码排序的文件,因此最高得分(杰马)第一次显示,得分最低(RILEY)是最后显示?

+1

您的意思是说Jemma得分最高? – khagler

回答

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]) 
+0

这只会打印第一个。你必须遍历所有已排序的元组并打印它们。 – miindlek

+0

非常感谢你 – skyejohnson

0

首先,你可以创建所有元组的名字/分数对的文件列表(姓名,分数)。然后,您可以使用排序()函数列表:

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)。希望这可以帮助!

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)