2015-12-09 22 views
6

ho il dizionario {'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7}Ordina dizionario per più valori

ho bisogno di ordinare questo dizionario prima numericamente, poi all'interno di quella, in ordine alfabetico. Se 2 articoli hanno lo stesso codice numerico, devono essere ordinati alfabeticamente.

L'output di questo dovrebbe essere Bob, Alex, Bill, Charles

Ho provato ad utilizzare lambda, di lista, ecc, ma io non riesco a farli per ordinare in modo corretto.

risposta

11

Utilizzando sorted con funzione di tasto (ordine per valore (d[k]) prima, quindi il tasto k):

>>> d = {'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7}  
>>> sorted(d, key=lambda k: (d[k], k)) 
['Bob', 'Alex', 'Bill', 'Charles'] 
4

Ordina sulle voci del dizionario (che sono tuple) utilizzando sorted(). È possibile specificare la chiave di ordinamento che sarà dai valori del dizionario, e quindi le sue chiavi:

>>> d = {'Bill': 4, 'Alex' : 4, 'Bob' : 3, "Charles": 7} 
>>> sorted(d.items(), key=lambda x:(x[1],x[0])) 
[('Bob', 3), ('Alex', 4), ('Bill', 4), ('Charles', 7)] 
>>> [t[0] for t in sorted(d.items(), key=lambda x:(x[1],x[0]))] 
['Bob', 'Alex', 'Bill', 'Charles'] 
Problemi correlati