Seite 1 von 1

Sortieren von Liste mit Tubel

Verfasst: Mittwoch 15. Dezember 2021, 19:11
von zweitklassigerCoder
Hey, komme leider nicht weiter.
Stehe vor folgendem Problem:
Mir liegt eine Liste vor die ich aus einem dict generiert habe. Die Liste sieht in etwa so aus:

[('apple', 4), ('wings', 2), ('ham', 1), ('eggs', 2), ('spam', 1), ('milk', 99)]

Nun will ich die Liste in absteigender Reihenfolge der Werte, also:

[('milk',99),('apple',4),('wings', 2),('eggs', 2),('spam',1)

Wie kann ich die Tubels einzeln betrachten bzw. die Werte der Tubels miteinander vergleichen?
Ich möchte hierzu die sort() oder die sorted() Funktion verwenden. Kann mir jmd. helfen? Vielen Dank!
Lg zweitklassigerCoder

Re: Sortieren von Liste mit Tubel

Verfasst: Mittwoch 15. Dezember 2021, 19:26
von pillmuncher
@zweitklassigerCoder:

Zuerst: es heißt Tupel, nicht Tubel.

Gegeben ein Tupel:

Code: Alles auswählen

('spam', 123)
dann kann man über einen Index auf die einzelnen Elemente zugreifen:

Code: Alles auswählen

>>> tup = ('spam', 123)
>>> tup[0]
'spam'
>>> tup[1]
123
Will man diese Liste von Tupeln sortieren:

Code: Alles auswählen

>>> tups = [('apple', 4), ('wings', 2), ('ham', 1), ('eggs', 2), ('spam', 1), ('milk', 99)]
dann kann man der sorted()-Funktion ein zweites Argument mitgeben, key, mit der man das Element auswählt, nach dem sortiert werden soll:

Code: Alles auswählen

>>> list(sorted(tups, key=lambda tup: tup[1]))
[('ham', 1), ('spam', 1), ('wings', 2), ('eggs', 2), ('apple', 4), ('milk', 99)]
Man kann auch operator.itemgetter importieren, dann braucht man keine lambda-Funktion schreiben:

Code: Alles auswählen

>>> from operator import itemgetter
>>> list(sorted(tups, key=itemgetter(1, 0)))
[('ham', 1), ('spam', 1), ('eggs', 2), ('wings', 2), ('apple', 4), ('milk', 99)]
Wie man sieht, kann man auch nach mehr als einem Element sortieren, damit bei gleichem zweiten Element zusätzlich auch nach dem ersten sortiert wird, also dass zB. ('eggs', 2) vor ('wings', 2) kommt.

Re: Sortieren von Liste mit Tubel

Verfasst: Mittwoch 15. Dezember 2021, 19:27
von rogerb
Bei sorted bist du schon richtig, du must nur in die Dokumentation schauen:
https://docs.python.org/3/howto/sorting ... -functions

Re: Sortieren von Liste mit Tubel

Verfasst: Mittwoch 15. Dezember 2021, 19:59
von Sirius3
@pillmuncher: `sorted` liefert immer eine Liste, der `list`-Aufruf ist daher unnötig.

@zweitklassigerCoder: wenn Du sorted benutzt, mußt Du nicht erst eine Liste erzeugen

Code: Alles auswählen

from operators import itemgetter

data = {'apple': 4, 'wings': 2, 'ham': 1, 'eggs': 2, 'spam': 1, 'milk': 99}
result = sorted(data.items(), key=itemgetter(1, 0))                                                                                                                                                                      

Re: Sortieren von Liste mit Tubel

Verfasst: Mittwoch 15. Dezember 2021, 20:11
von pillmuncher
@Sirius3: Ach ja. Seit Python3 mach ich automatisch um alles sequenz-/iteratorartige einen list()-Aufruf. Ist natürlich nicht immer sinnvoll.