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?
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?
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]
.
>>> 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
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.