2015-03-24 11 views
5

Ho le seguenti dizionari:Ordina per valori (discendente) e quindi i tasti (crescente) nel dizionario Python

mydict1 = {1: 11, 2: 4, 5: 1, 6: 1} 
mydict2 = {1: 1, 5: 1} 

Per ognuno di loro mi piacerebbe Ordina per valori (discendente) e quindi tasti (in ordine crescente), ottenendo questo risultato:

out_dict1 = [((1, 11), (2, 4), (5, 1), (6, 1)] 
out_dict2 = [(1, 1), (5, 1)] 

Qual è il modo per farlo?

Ho usato questo, ma non si può ottenere il risultato costantemente per due casi di cui sopra:

sorted(mydict.items(), key=lambda x: (x[1],x[0])) 
+0

Tutte le chiavi e i valori sono sempre garantiti come numeri? Se è così, allora la soluzione di @ thefoureye è la più semplice. In caso contrario, hai bisogno di un po 'di più ... che Python abilita grazie al suo tipo essendo garantito ** stabile ** ... –

risposta

7

Dal momento che si desidera ordinare i valori in ordine decrescente, basta negare il valore dei valori nella funzione passato al parametro key , come questo

sorted(mydict.items(), key=lambda x: (-x[1], x[0])) 

Ora, i valori verranno ordinati in ordine decrescente e se due valori sono uguali, i tasti saranno considerati e saranno ordinati in ordine crescente.

+0

Proprio quello che ho cercato di cercare per giorni. E oggi ho scoperto di lambda OMG sono così cool. – StackPointer

Problemi correlati