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
Sortieren von Liste mit Tubel
- pillmuncher
- User
- Beiträge: 1530
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
@zweitklassigerCoder:
Zuerst: es heißt Tupel, nicht Tubel.
Gegeben ein Tupel:dann kann man über einen Index auf die einzelnen Elemente zugreifen:
Will man diese Liste von Tupeln sortieren:dann kann man der sorted()-Funktion ein zweites Argument mitgeben, key, mit der man das Element auswählt, nach dem sortiert werden soll:
Man kann auch operator.itemgetter importieren, dann braucht man keine lambda-Funktion schreiben:
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.
Zuerst: es heißt Tupel, nicht Tubel.
Gegeben ein Tupel:
Code: Alles auswählen
('spam', 123)
Code: Alles auswählen
>>> tup = ('spam', 123)
>>> tup[0]
'spam'
>>> tup[1]
123
Code: Alles auswählen
>>> tups = [('apple', 4), ('wings', 2), ('ham', 1), ('eggs', 2), ('spam', 1), ('milk', 99)]
Code: Alles auswählen
>>> list(sorted(tups, key=lambda tup: tup[1]))
[('ham', 1), ('spam', 1), ('wings', 2), ('eggs', 2), ('apple', 4), ('milk', 99)]
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)]
In specifications, Murphy's Law supersedes Ohm's.
Bei sorted bist du schon richtig, du must nur in die Dokumentation schauen:
https://docs.python.org/3/howto/sorting ... -functions
https://docs.python.org/3/howto/sorting ... -functions
@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
@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))
- pillmuncher
- User
- Beiträge: 1530
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
@Sirius3: Ach ja. Seit Python3 mach ich automatisch um alles sequenz-/iteratorartige einen list()-Aufruf. Ist natürlich nicht immer sinnvoll.
In specifications, Murphy's Law supersedes Ohm's.