2011-09-07 16 views
20

Powiel możliwe:
Python: Sort a dictionary by valuewartości sortować i lista zwrot kluczy od dict Pythona

Mam słownika takiego:

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

Chcę listę klawisze posortowane według wartości, tj. [Name2, Name1, Name6....]

Dzięki!

+0

dzięki za @Felix rada, ale szukałem zanim poprosiłem i odpowiedzi są nie to, czego potrzebuję. – Alejandro

+3

Muszę się nie zgodzić, jest wiele podobnych pytań z odpowiedzią, której szukasz. Na przykład. druga, najwyższa głosowana odpowiedź w pytaniu, które łączyłem, zapewnia takie samo rozwiązanie jak najwyższa głosowana odpowiedź tutaj lub np. [te odpowiedzi] (http://stackoverflow.com/questions/3417760/how-to-sort-a-python-dict-by-value). Być może będziesz musiał wypróbować niektóre rzeczy, ale pytanie zdecydowanie już tu było. –

+0

"odpowiedzi nie są tym, czego potrzebuję". Bezużyteczne stwierdzenie. Czego brakuje w istniejących odpowiedziach? ** Jak ** są niekompletne lub wprowadzające w błąd? ** Co ** sprawia, że ​​twoje pytanie jest jakoś unikalne? Proszę, bądź konkretny**. –

Odpowiedz

30

Zastosowanie sorted metodą get jako klucz (klucze słownika można uzyskać dostęp przez iterating):

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

Jest to niepoprawne, ponieważ będzie sortować tylko klucze, a nie sortować według ich wartości. –

+1

ale to, zwraca listę posortowaną według kluczy. Potrzebuję listy kluczy posortowanych według wartości. :) – Alejandro

+2

@ David Wolever Ups, masz całkowitą rację. Naprawiony. – phihag

1

bym użyć:

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

key argument sortowania jest wymagalne która zwraca klucz sortowania do użycia. W tym przypadku zwracam krotkę (value, key), ale możesz po prostu zwrócić wartość (np. key=lambda item: item[1]), jeśli chcesz.

+0

Inne rozwiązanie jest dla mnie prostsze i łatwiejsze do odczytania. –

2

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

ta sortuje klawiszy i dla każdego klucza, wykorzystuje a.get znaleźć wartość do wykorzystania jako wartość sortowania.

+0

Należy pamiętać, że nie ma potrzeby używania 'a.keys', który tworzy listę kluczy. 'a' (lub' a.iterkeys() ') jest już iterowalne dla kluczy dyktowania a. –

+1

Tak, wiem, że to niepotrzebne, ale myślę, że to brzmi lepiej. Myślę o dyktach jako kontenerach par, a nie kontenerach kluczy. –

4

Zastosowanie sorted „s key argumentem

sorted(d, key=d.get) 
Powiązane problemy