2011-09-07 76 views
20

可能重複:
Python: Sort a dictionary by value排序值和字典蟒蛇歸還鑰匙的名單

我有這樣一本字典:

A = {'Name1':34, 'Name2': 12, 'Name6': 46,....} 

我想要的清單按值排序的按鍵,即[Name2, Name1, Name6....]

謝謝!

+0

謝謝,但我搜索之前,我問和答案是不是我所需要的。 – Alejandro

+3

我不同意,有很多類似的問題與你正在尋找的答案。例如。在我所關聯的問題中,第二高的投票答案提供了與此處或者最高投票答案相同的解決方案[這些答案](http://stackoverflow.com/questions/3417760/how-to-sort-a-python-dict-by-value)。你可能不得不嘗試一些東西,但問題已經在這裏了。 –

+0

「答案不是我所需要的」。無用的陳述。現有答案中缺少什麼? **他們如何**不完整或誤導? **什麼**使您的問題獨特?請成爲**具體**。 –

回答

30

使用sortedget方法的關鍵(字典鍵可以通過iterating訪問):

sorted(A, key=A.get) 
+4

這是不正確的,因爲它只會對鍵進行排序,而不是按它們的值對鍵進行排序。 –

+1

但是,這返回按鍵排序的列表。我需要一個按值排序的鍵列表。 :) – Alejandro

+2

@David Wolever糟糕,你是完全正確的。固定。 – phihag

1

我會使用:

items = dict.items() 
items.sort(key=lambda item: (item[1], item[0])) 
sorted_keys = [ item[0] for item in items ] 

key參數排序是一個可調用它返回要使用的排序鍵。在這種情況下,我返回一個(value, key)的元組,但是如果您願意,您可以返回值(即key=lambda item: item[1])。

+0

另一種解決方案更簡單,更易於閱讀。 –

2

sorted(a.keys(), key=a.get)

此排序鍵,並且每個鍵,使用a.get找到它的排序值使用的值。

+0

請注意,沒有必要使用'a.keys',它會生成一個鍵列表。 'a'(或'a.iterkeys()')已經可以在字典a的鍵上迭代了。 –

+1

是的,我知道這是沒有必要的,但我認爲它會更好。我認爲字典是成對的容器,而不是容器的鑰匙。 –

4

使用sortedkey論證的意見@Felix

sorted(d, key=d.get)