2011-09-07 11 views
20

Eventuali duplicati:
Python: Sort a dictionary by valuevalori di ordinamento e la lista restituzione delle chiavi da dict pitone

Ho un dizionario come questo:

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

Voglio un elenco di chiavi ordinate in base ai valori, ovvero [Name2, Name1, Name6....]

Grazie !!!

+0

grazie per il consiglio @Felix, ma ho cercato prima ho chiesto e le risposte non sono quello che mi serve. – Alejandro

+3

Devo dissentire, ci sono un sacco di domande simili con la risposta che stai cercando. Per esempio. la seconda risposta più votata nella domanda a cui ho fatto riferimento fornisce la stessa soluzione della risposta più votata qui o ad es. [queste risposte] (http://stackoverflow.com/questions/3417760/how-to-sort-a-python-dict-by-value). Potrebbe essere necessario provare alcune cose, ma la domanda era sicuramente già qui. –

+0

"le risposte non sono ciò di cui ho bisogno". Una dichiarazione inutile. Cosa manca nelle risposte esistenti? ** In che modo ** sono incompleti o fuorvianti? ** Cosa ** rende la tua domanda in qualche modo unica? Si prega di essere ** specifico **. –

risposta

30

Utilizzare sorted con il metodo get come chiave (chiavi del dizionario è reperibile iterating):

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

Questo non è corretto in quanto sarà solo ordinare le chiavi, non ordinare le chiavi in ​​base ai loro valori. –

+1

ma questo, restituisce un elenco ordinato per chiavi. Ho bisogno di un elenco di chiavi ordinato per valori. :) – Alejandro

+2

@David Wolever Oops, hai perfettamente ragione. Fisso. – phihag

1

userei:

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

L'argomento key di ordinare è un callable che restituisce la chiave di ordinamento da utilizzare. In questo caso, restituisco una tupla di (value, key), ma potresti semplicemente restituire il valore (ad esempio, key=lambda item: item[1]) se lo desideri.

+0

L'altra soluzione è più semplice e più facile da leggere per me. –

2

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

Questo ordina i tasti, e per ogni tasto, usa a.get per trovare il valore da utilizzare come il suo valore specie.

+0

Si noti che non è necessario usare 'a.keys', che crea una lista delle chiavi. 'a' (o' a.iterkeys() ') è già iterabile sui tasti del dict a. –

+1

Sì, lo so che non è necessario, ma penso che si legge meglio. Penso a dicts come contenitori di coppie, non contenitori di chiavi. –

4

Usa sorted s' key argomento

sorted(d, key=d.get) 
Problemi correlati