[python] Sortieren Sie eine Liste von Tupeln nach dem 2. Element (Integer-Wert)


3 Answers

>>> from operator import itemgetter
>>> data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
>>> sorted(data,key=itemgetter(1))
[('abc', 121), ('abc', 148), ('abc', 221), ('abc', 231)]

IMO mit itemgetter ist in diesem Fall besser lesbar als die Lösung von @cheeken. Es ist auch schneller, da fast die gesamte Berechnung auf der c Seite (kein Wortspiel beabsichtigt) statt durch die Verwendung von lambda .

>python -m timeit -s "from operator import itemgetter; data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]" "sorted(data,key=itemgetter(1))"
1000000 loops, best of 3: 1.22 usec per loop

>python -m timeit -s "data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]" "sorted(data,key=lambda x: x[1])"
1000000 loops, best of 3: 1.4 usec per loop
Question

Diese Frage hat hier bereits eine Antwort:

Ich habe eine Liste von Tupeln, die ungefähr so ​​aussieht:

[('abc', 121),('abc', 231),('abc', 148), ('abc',221)]

Ich möchte diese Liste in aufsteigender Reihenfolge nach dem ganzzahligen Wert innerhalb der Tupel sortieren. Ist es möglich?




Definieren Sie für eine Lambda-Vermeidungsmethode zuerst Ihre eigene Funktion:

def MyFn(a):
    return a[1]

dann:

sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)], key=MyFn)



Verwenden Sie für eine direkte Sortierung

foo = [(list of tuples)]
foo.sort(key=lambda x:x[0]) #To sort by first element of the tuple



Hinzufügen zu Cheekens Antwort, So sortieren Sie eine Liste von Tupeln nach dem 2. Punkt in absteigender Reihenfolge .

sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)],key=lambda x: x[1], reverse=True)



Related