541 Stimmen

Sortieren einer Liste von Tupeln nach dem 2. Element (Ganzzahlwert)

Ich habe eine Liste von Tupeln, die in etwa wie folgt aussieht:

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

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

836voto

cheeken Punkte 32687

Versuchen Sie, die key Schlüsselwort mit sorted() .

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

key sollte eine Funktion sein, die angibt, wie das vergleichbare Element aus Ihrer Datenstruktur abgerufen werden kann. In Ihrem Fall ist es das zweite Element des Tupels, so dass wir auf [1] .

Zur Optimierung siehe die Antwort von jamylak mit itemgetter(1) , die im Wesentlichen eine schnellere Version von lambda x: x[1] .

236voto

jamylak Punkte 119693
>>> 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. Sie ist auch schneller, da fast alle Berechnungen auf dem Computer durchgeführt werden. c Seite (kein Wortspiel beabsichtigt) und nicht durch den Einsatz 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

51voto

Vignesh Jayavel Punkte 974

Ich ergänze Cheekens Antwort, So sortiert man eine Liste von Tupeln nach dem 2. Element in absteigende Reihenfolge .

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

45voto

Angus Punkte 451

Als Python-Neuling wollte ich nur erwähnen, dass wenn die Daten tatsächlich so aussehen würden:

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

dann sorted() würde automatisch nach dem zweiten Element des Tupels sortieren, da die ersten Elemente alle identisch sind.

29voto

Shivank Tibrewal Punkte 291

Für eine In-Place-Sortierung, verwenden Sie

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X