2015-03-24 25 views
5

Ich habe die folgenden Wörterbücher:Sortieren nach Werten (absteigend) und dann Tasten (aufsteigend) in Python Wörterbuch

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

Für jeden von ihnen Ich mag würde, um zuerst sortieren nach Werten (absteigend) und dann Tasten (aufsteigend), mit diesem Ausgang:

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

Wie ist es zu tun?

verwenden ich dies aber nicht das Ergebnis konsequent für zwei Fälle oben erhalten:

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

Sind alle Schlüssel und Werte immer garantiert Zahlen? Wenn ja, dann ist @ thefoureyes Lösung am einfachsten. Wenn nicht, brauchst du ein wenig mehr ... was Python ermöglicht, da seine Art garantiert ist ** stabil ** ... –

Antwort

7

Da Sie die Werte in absteigender Reihenfolge sortiert werden sollen, nur den Wert der Werte in der Funktion der key Parameter übergeben negieren , wie dies

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

Nun werden die Werte in absteigender Reihenfolge sortiert werden und wenn zwei Werte gleich sind, werden die Schlüssel betrachtet, und sie werden in aufsteigender Reihenfolge sortiert werden.

+0

Genau das, was ich seit Tagen gesucht habe. Und heute habe ich von Lambda OMG erfahren, dass sie so cool sind. – StackPointer

Verwandte Themen