Seite 1 von 1
Frage zu sorted
Verfasst: Mittwoch 11. Juni 2014, 21:07
von djangofish
Hallo,
ich möchte gern eine Liste mit Listen sortieren
liste = [['aa','bb',1],['cc','dd',2]]
ich möchste diese Liste gern nach der Ziffer im letzten Feld sorieren und zwar absteigend. Mit dem normalen sorted geht es nicht, weil es lieber einen String hätte. Ich habe noch die Erweiterung natsorted gefunden, jedoch sortiert dies nur aufsteigend. Ein Keyword für Sortierung ist nicht vorgesehen.
Code: Alles auswählen
results = natsort.natsorted(results, key=itemgetter(len(results[0])-1))
Hat jemand einen Tipp? In Python3 wäre es schön:)
Danke
Peter
Re: Frage zu sorted
Verfasst: Mittwoch 11. Juni 2014, 21:12
von /me
Mit
itemgetter geht das ganz prima.
Code: Alles auswählen
>>> from operator import itemgetter
>>> liste = [['aa','bb',1],['cc','dd',2],['ee','ff',0]]
>>> liste.sort(key=itemgetter(2), reverse=True)
>>> liste
[['cc', 'dd', 2], ['aa', 'bb', 1], ['ee', 'ff', 0]]
Wenn es explizit das letzte Element der inneren Liste sein soll, dann bietet sich
lambda an.
Code: Alles auswählen
>>> liste = [['aa','bb',1],['cc','dd',2],['ee','ff','gg',0]]
>>> liste.sort(key=lambda x: x[-1], reverse=True)
>>> liste
[['cc', 'dd', 2], ['aa', 'bb', 1], ['ee', 'ff', 'gg', 0]]
Nachtrag: Wie ein kurzes Experiment zeigt geht
itemgetter(-1) auch. Das kannte ich bisher nicht. Wieder was hinzugelernt.
Re: Frage zu sorted
Verfasst: Mittwoch 11. Juni 2014, 21:21
von djangofish
Ah!
Vielen Dank
Re: Frage zu sorted
Verfasst: Donnerstag 12. Juni 2014, 07:51
von Hyperion
/me hat geschrieben:
Nachtrag: Wie ein kurzes Experiment zeigt geht itemgetter(-1) auch. Das kannte ich bisher nicht. Wieder was hinzugelernt.
Ich danke Dir - wusste ich auch noch nicht

Re: Frage zu sorted
Verfasst: Donnerstag 12. Juni 2014, 07:58
von BlackJack
Es geht auch ``itemgetter('spam')`` zum Beispiel wenn man es dann auf Wörterbücher anwendet. Was immer man dort angibt wird halt einfach weitergegeben:
Code: Alles auswählen
In [8]: operator.itemgetter('answer')({'answer': 42})
Out[8]: 42
Das man -1 angeben kann ist also keine Frage von `itemgetter()` sondern von den Objekten auf die das angewendet wird. Wenn die mit ``obj[-1]`` klar kommen, dann kann man das auch übergeben.
Re: Frage zu sorted
Verfasst: Donnerstag 12. Juni 2014, 08:59
von /me
BlackJack hat geschrieben:Das man -1 angeben kann ist also keine Frage von `itemgetter()` sondern von den Objekten auf die das angewendet wird. Wenn die mit ``obj[-1]`` klar kommen, dann kann man das auch übergeben.
Die Beschreibung zu
itemgetter in der Dokumentation ist da auch ziemlich eindeutig. Vielleicht lernt ja nach dem Lesen der Dokumentation jetzt noch jemand, dass man
itemgetter auch noch mehrere Parameter übergeben kann.

Re: Frage zu sorted
Verfasst: Donnerstag 12. Juni 2014, 09:23
von pillmuncher
/me hat geschrieben:Vielleicht lernt ja nach dem Lesen der Dokumentation jetzt noch jemand, dass man
itemgetter auch noch mehrere Parameter übergeben kann.

Oder andere:
Code: Alles auswählen
>>> slicer = itemgetter(slice(1, 4, 2))
>>> slicer([3, 4, 5, 6, 7])
[4, 6]
Re: Frage zu sorted
Verfasst: Donnerstag 12. Juni 2014, 17:50
von EyDu
pillmuncher hat geschrieben:/me hat geschrieben:Vielleicht lernt ja nach dem Lesen der Dokumentation jetzt noch jemand, dass man
itemgetter auch noch mehrere Parameter übergeben kann.

Oder andere:
Wie BlackJack schon schrieb: Man kann alles übergeben (und so viele wie man möchte) was die __getitem__-Methode der Sequenz schluckt. Egal ob nun Integer, Slices, Bilder von Katzen oder was sonst noch so für Indizes rumfliegen
