2009-02-22 39 views
109

Ho un dict in cui ogni chiave fa riferimento a un valore int. Qual è il modo migliore per ordinare le chiavi in ​​un elenco a seconda dei valori?Ordinamento chiavi del dizionario in python

+7

Inoltre, questo chiede sull'ordinamento a chiave, la risposta è legata sull'ordinamento per valore. – ForeverWintr

+0

le risposte sottostanti restituiscono un elenco ordinato delle sole chiavi (che è banale). la risposta alla domanda "duplicata" sull'ordinamento per valore restituisce una lista ordinata di coppie chiave/valore (ordinata per valore). Se lo vuoi ordinare per tasto usa semplicemente 0 invece di come parametro per operator.itemgetter(). – ScienceFriction

risposta

91
>>> mydict = {'a':1,'b':3,'c':2} 
>>> sorted(mydict, key=lambda key: mydict[key]) 
['a', 'c', 'b'] 
12
my_list = sorted(dict.items(), key=lambda x: x[1]) 
+1

@ user815423426 hai modificato il mio post 's/list/my_list /' perché "list è una parola chiave in python". La tua modifica va bene, ma la lista non è una parola chiave (c.f. https://docs.python.org/3/reference/lexical_analysis.html#keywords), quindi il mio frammento di programma sarebbe (bytecode) compilato ed eseguito. È comunque un nome nello spazio dei nomi '__builtins__', ed è una cattiva pratica mettere in ombra quel nome - con una variabile di locale chiamata lista - e orribile per sovrascriverlo - con una variabile globale chiamata lista, ad es. 'list = tuple'. –

2
[v[0] for v in sorted(foo.items(), key=lambda(k,v): (v,k))] 
346

ho come questo:

sorted(d, key=d.get) 
+0

Bello, pensavo sarebbe bello avere una soluzione elegante che fornisca coppie (chiave, valore) ordinate per chiave. ... e non richiede di fornire il nome della variabile dict più di una volta (tendo ad avere nomi di variabili descrittive molto lunghe). d.iteritems() sembra ancora il più utile. – travc

+0

In secondo luogo la soluzione elegante, ordinata k, v pair – crock1255

Problemi correlati