2015-06-20 101 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)