2016-09-26 7 views
-1
[((D,A),0.0),((D,C),0.0),((D,E),0.5)] 

Ich brauche die Liste zu sortieren, wie:Sortierung Liste von Tupeln von Tupeln

[((D,E),0.5),((D,A),0.0),((D,C),0.0)] 

ich die sorted() Funktion verwendet haben, und ich bin 0.5, 0.0 basierend auf Werten sortieren können ... Aber ich bin nicht Ich bin in der Lage, nach der alphabetischen Reihenfolge zu sortieren, da ich die Liste in absteigender Reihenfolge nach den Zahlen und in aufsteigender Reihenfolge der Alphabete sortieren muss, wenn die Zahlen denselben Wert haben.

+1

'sortiert (li, schlüssel = lambda t: (-t [-1], t [0]))' – dawg

Antwort

2

ein Tupel als Sortierschlüssel mit einem negativen auf dem Schwimmer Verwenden Sie die Reihenfolge zu umkehren:

>>> li=[(('D','A'),0.0),(('D','C'),0.0),(('D','E'),0.5)] 
>>> sorted(li, key=lambda t: (-t[-1],t[0])) 
[(('D', 'E'), 0.5), (('D', 'A'), 0.0), (('D', 'C'), 0.0)] 

Wenn Sie nicht tun Negation (sagen an einer Schnur oder Buchstaben Wert oder etwas nicht numerisch), dann können Sie nutzt die Tatsache, dass die Python-Sortierfunktion stabil ist und tun, um die Art in zwei Schritten:

>>> li=[(('D','A'),'A'),(('D','C'),'A'),(('D','E'),'C')] 
>>> sorted(sorted(li), key=lambda t: t[-1], reverse=True) 
[(('D', 'E'), 'C'), (('D', 'A'), 'A'), (('D', 'C'), 'A')] 
+0

Netter und geschickter Code !!!! Vielen Dank @dawg –

+0

Es gibt eine großartige [Übersicht] (https://wiki.python.org/moin/HowTo/Sorting) zum Sortieren in Python. – dawg

1

ähnlich Sie sorted mit einem iterable liefern könnten, dass das Ergebnis einer anderen sort ist:

>>> from operator import itemgetter 
>>> t = [(('D','A'),0.0),(('D','C'),0.0),(('D','E'),0.5)] 
>>> sorted(sorted(t), key=itemgetter(1), reverse=True) 
[(('D', 'E'), 0.5), (('D', 'A'), 0.0), (('D', 'C'), 0.0)]