2013-10-12 279 views
-1

我有一個列表,它目前按鍵(A,B,C)排序。該值是密鑰出現在文件中的次數。代碼給出如下結果:排序Python列表

14 A 
157 B 
17 C 
... 

我需要反轉此順序。我想用價值,而不是關鍵的排序,所以它讀取這樣的:

14 A 
17 C 
157 B 

我已閱讀並嘗試了所有的文件我能找到這裏和谷歌。我認爲它不應該太複雜,但是我正在過度看待某些東西。

有沒有簡單的解決方案來讀取按數字值的順序?每次我嘗試按值排序時,它都會顯示'int或str不可調用'。我不明白這是什麼意思。

我的一些代碼如下:

lst = list() 
for key, val in counts.items(): 
    lst.append((key, val)) 
lst.sort()  

for key, val in lst: 
    print val, key 
+1

查看列表方法'sort'和參數'key'。 – rlms

+0

http://stackoverflow.com/a/16772088/489590 –

+0

謝謝Brian。我也試過這個。我也遇到了sort()和sort()的問題。 –

回答

0

list.sort接受可選key參數。

>>> counts = { 
...  'A': 14, 
...  'B': 157, 
...  'C': 17, 
... } 
>>> 
>>> lst = counts.items() 
>>> lst.sort(key=lambda x: x[1]) # x[1] => count 
>>> for key, val in lst: 
...  print val, key 
... 
14 A 
17 C 
157 B 

根據Mutable Sequence Types

sort()方法需要用於控制比較可選參數。

...

key指定用於提取從每個列表元素的 對比密鑰一個參數的函數:鍵= str.lower。默認 值爲無。

+0

謝謝falsetru,這個解決方案也可以。你能解釋一下lst.sort(key = lambda x:x [1])的行和語法嗎?這是怎麼讀的? [1]是否代表列表中值的位置? –

+0

@MariaGosur,'lambda'是一種匿名函數。 'lambda x:x [1]'是一個返回傳遞參數的第二項的函數。這裏的'x'是列表中的每一項。 – falsetru

+0

啊沒關係。我簡要概述了它。我必須花更多時間在實踐中研究lambda,儘管我隱約地使用它。雖然實質上有意義。謝謝你解釋它。這有很大幫助。 –

1

key參數sort()允許你指定排序鍵。

你可以使用:

lst.sort(key=lambda (k,v):v) 

,或者等價地,

lst.sort(key=operator.itemgetter(1)) 
+0

非常感謝你的幫助NPE。對此,我真的非常感激。第一行建議運作良好。但是,我不知道我完全掌握那條線正在閱讀的內容。你能解釋一下lambda和v的語法嗎? –

0

這工作,假設

import operator 
for key, val in counts.items(): 
    lst.append((key, val)) 
# lst should be like this : 
# lst = [('A',14), ('B',157), ('C',17), ('D',12), ('E',189)] 
sorted_lst = sorted(set(lst), key=operator.itemgetter(1)) 
print sorted_lst 
+0

謝謝fjammes。我還沒有深入研究python的進口,但我會進一步研究這一點。我很欣賞並重視每個人的幫助! –