2016-03-15 88 views
-1

鑑於看起來如下文件:讀取文件到詞典並試圖排名

(u'castro', 5.4716387933635691) 
(u'catcher', 5.4716387933635691) 
(u'center', 4.3730265046954591) 
(u'caus', 5.0661736852554045) 

我怎樣才能讀取這個文件到Python字典,然後排序按分數?

d={} 
with open("scores.txt") as f: 
    for line in f: 
     key, val= line.strip().split() 
     d[key]=val 

我試圖通過VAL在這種情況下進行排序,然後在下面的表格得到的結果:

(u'castro', 5.4716387933635691) 
(u'catcher', 5.4716387933635691) 
(u'caus', 5.0661736852554045) 
(u'center', 4.3730265046954591) 
+0

你的代碼是不正確縮進請修復它。請注意,Python字典是_unordered_集合,所以在嘗試對其進行排序時沒有太多意義。在'collections'模塊中有_is_ an ['OrderedDict'](https://docs.python.org/3/library/collections.html#collections.OrderedDict)'dict'的子類,但我懷疑一個簡單的'列表「是你在這裏所需要的。 –

回答

2

這會產生一個嵌套列表:

from operator import itemgetter 

with open("scores.txt") as f: 
    lst = [i.rstrip("\n")[1:-1].split(", ") for i in f.readlines()] 


for i in lst: 
    i[1] = float(i[1]) 
    i[0] = i[0][2:-1] 

lst.sort(key=itemgetter(1), reverse=True) 

輸出:

>>> lst 
[['castro', 5.471638793363569], ['catcher', 5.471638793363569], ['caus', 5.0661736852554045], ['center', 4.373026504695459]] 

書寫名稱到一個文件:

with open("scores2.txt", "w") as f: 
    for i in lst: 
     f.write("{}\n".format(i[0])) 
+0

是否可以使輸出保持與輸入相同的格式?原因是我需要這種格式的進一步處理。 – minks

+0

這可能是最接近輸入格式的。 –

+0

嘿,這似乎沒有排序清單:這是我得到的輸出: [['trial',5.471638793363569],['faint',4.555348061489413],['仍然',5.471638793363569] – minks

0
d = sorted(d.items(), key=lambda x: x[1], reverse=True) 
3

Python字典沒有秩序,所有你能做的就是創建一個排序的表示。

import operator 
d={} 
with open("scores.txt") as f: 
    for line in f: 
    key, val= line.strip().split() 
    d[key]=val 

sorted_d = sorted(d.items(), key=operator.itemgetter(0)) 
print sorted_d 
+0

請注意,這可能不會是OP期望的數字順序... –

+0

@AnttiHaapala是的,那是真的應該是.itemgetter(0)。 –

+0

我希望保持上述格式的結果。我以這種格式接收輸出:(「(u'castro',」,'5.4716387933635691)') 如何除去多餘的雙引號和括號? – minks