Dict sortieren nach...

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Montag 28. April 2008, 20:45

sea-live hat geschrieben:wo liegt der vorteil wenn ich dazu ein modul brauche
desweiteren
Es ist einfach gut getesteter Code aus der Standardbibliothek und warum sollte man etwas neu schreiben, was es schon gibt und genau dazu gedacht ist. Außerdem verringert es die eigenen Fehler. Und natülrich ist es auch viel lesbarer als ein lambda-Ausdruck.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Dienstag 29. April 2008, 07:51

Leonidas hat geschrieben:
sea-live hat geschrieben:wo liegt der vorteil wenn ich dazu ein modul brauche
Weil die Funktionalität von itemgetter dokumentiert ist und man nicht überlegen muss was irgendwelche Funktionen machen. Außerdem ist er womöglich auch schneller.
überzeugend und einleuchtend Danke für die Überaus lehrreiche Info
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Dienstag 29. April 2008, 08:35

EyDu hat geschrieben:
sea-live hat geschrieben:wo liegt der vorteil wenn ich dazu ein modul brauche
desweiteren
Es ist einfach gut getesteter Code aus der Standardbibliothek und warum sollte man etwas neu schreiben, was es schon gibt und genau dazu gedacht ist. Außerdem verringert es die eigenen Fehler. Und natülrich ist es auch viel lesbarer als ein lambda-Ausdruck.
Das sehe ich anders. Ja, das Ding ist dazu gedacht. Aber ich kann nicht erkennen, was an ``lambda x: x["Date"]`` unlesbar ist, zumal man mit "itemgetter" auch nichts anfangen kann, wenn man nicht weiß was es genau tut.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dienstag 29. April 2008, 11:01

Zugegeben, der Lambda-Ausdruck ist nicht schwierig zu lesen, aber man muss relativ genau hinschauen. "itemgetter" hingegen ist, zumindest für mich, sehr intuitiv. Und die Standard-Bibliothek nicht zu kennen, sollte ja wohl keine ausrede sein.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Dienstag 29. April 2008, 12:58

Mag sein das wir das hier jetzt breittreten
aber ich finde in keiner docu was zu itemgetter
weder bei google nioch bei pydocu und schon garnicht in wx docu

kann mal jemand diesen ominösen docu link hier einstellen

dazu ist das forum doch da es gibt massig was zu lamda

beides funktioniert wie man an den beispielen sieht

mich stört halt nur das lamda bereits ab 2.4 für diese dinge optimiert wurde
und in den standart namensraum übernommmen wurde
ich soll nun fürs bessere verständniss eine bibliotek nachladen was
beim compalieren dann zusätzlichen platz beansprucht.
Diskusion erwünscht minimalismuss gefordert beim Programmieren!
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dienstag 29. April 2008, 13:02

Hier geht es zur Doku von "operator.itemgetter".
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Dienstag 29. April 2008, 14:05

Moin,
sea-live hat geschrieben:mich stört halt nur das lamda bereits ab 2.4 für diese dinge optimiert wurde
die itemgetter-Funktion ist schneller als die lambda-Funktion.
ich soll nun fürs bessere verständniss eine bibliotek nachladen was
beim compalieren dann zusätzlichen platz beansprucht.
Gerade getestet: Die lambda-Variante ist kompiliert größer als die itemgetter-Variante:

Code: Alles auswählen

l = [[1,2,3,4]]
print filter(lambda x: x[2], l)
Größe: 271 Bytes.

Code: Alles auswählen

import operator
l = [[1,2,3,4]]
print filter(operator.itemgetter(2), l)
Größe: 224 Bytes.

Gruß,
Manuel
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 29. April 2008, 14:31

sea-live hat geschrieben:mich stört halt nur das lamda bereits ab 2.4 für diese dinge optimiert wurde
und in den standart namensraum übernommmen wurde
Quatsch. Lambda ist schon seit fast immer da (mindestens seit 1.5.x), die Überlegung war sogar, es für Python 3.0 wegzulassen, da viele Anwendungsbereiche für lambdas durch andere Konstrukte übernommen worden sind, etwa ``filter()`` und ``map()`` durch List Comprehensions, Attribut und Indexzugriff durch Itemgetter und Attrgetter, etc.
sea-live hat geschrieben:Diskusion erwünscht minimalismuss gefordert beim Programmieren!
Ich habe letztens ein Programm geschrieben, in dem ich reihenweise Scheme Grundfunktionen nachgebaut habe, aber sonderlich gut war das Programm nicht. Ich würde lieber Funktionen der Stdlib verwenden, als sie einfach so nachzubauen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 29. April 2008, 14:52

sea-live hat geschrieben:kann mal jemand diesen ominösen docu link hier einstellen
Oben gibt es ja schon ein Link, in der neuen Doku sind allerdings auch Beispiele: [mod]operator#operator.itemgetter[/mod]

EDIT: btw. zum Thema Sortieren, gibt es auch diese Seite im Wiki: [wiki]Sortierungs-Tutorium[/wiki]

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Dienstag 29. April 2008, 18:08

da sag ich mal DANKE

mit dem beitrag von Jens haben sich dann alle fragen erübrigt

wer suchet der findet dieser thread hats nun wirklich insich!
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Dienstag 29. April 2008, 19:19

EyDu hat geschrieben:Außerdem würde man statt deinem Lambda-Ausdruck 'operator.itemgetter("Date")' verwenden.
Ich nicht. `itemgetter` sieht vielleicht sauberer aus, aber mich stört der zusätzliche Import sehr. Wenn `itemgetter` im Standard-Namespace *wäre*, würde ich es verwenden, aber so ist das Lambda-Konstrukt trotzdem handlicher - plus die Flexibilität, es später noch anzupassen, wenn man die Datenstruktur ändern sollte.

Leonidas hat geschrieben:Weil die Funktionalität von itemgetter dokumentiert ist und man nicht überlegen muss was irgendwelche Funktionen machen.
Und die von `lambda` nicht? Dann habe ich wohl 'ne andere Doku als du :p
Leonidas hat geschrieben:Außerdem ist er womöglich auch schneller.
Das ist soweit ich das sehe nur eine Mutmaßung.


sea-live:
In deinem Code-Beispiel ist die `main()`-Funktion reichlich witzlos, sofern `main()` nicht z.B. in der gängigen Bedingung `if __name__ == '__main__':` verpackt ist.
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dienstag 29. April 2008, 19:41

Wir diskutieren doch jetzt nicht schon eine Seite darüber, oder? Ich glaube beide Seiten können die Argumente der anderen nachvollziehen (und wissen ganz genau, dass sie selbst im Recht sind ;-) ) und letzendlich endet es in einer Geschmacksfrage.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Dienstag 29. April 2008, 22:45

Dann ist wohl Tatsache, dass es zwei Lösungen gibt, die beide eingeschränkt sind und sich entsprechend nicht durchsetzen wollen? Oder gibt es vielleicht einfach zufällig beide, weil `lambda` es einfach kann und `itemgetter` aus vermutlichen Gründen der Überladung existiert? Wird es das System/Python-Zen von Innen auffressen? ZOMG!
BlackJack

Mittwoch 30. April 2008, 07:12

Vielleicht resultiert `itemgetter()` ja auch aus der Überlegung heraus, dass ``lambda`` abgeschafft werden sollte. Konnte ja keiner ahnen, das der BDFL da doch noch einlenkt. :-)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 30. April 2008, 10:30

Y0Gi hat geschrieben:
Leonidas hat geschrieben:Weil die Funktionalität von itemgetter dokumentiert ist und man nicht überlegen muss was irgendwelche Funktionen machen.
Und die von `lambda` nicht? Dann habe ich wohl 'ne andere Doku als du :p
Du Funktionalität von ``lambda`` schon, die von diesem speziellen Lambda nicht.
Y0Gi hat geschrieben:
Leonidas hat geschrieben:Außerdem ist er womöglich auch schneller.
Das ist soweit ich das sehe nur eine Mutmaßung.
``itemgetter()`` ist immerhin in C implementiert, das ``lambda`` ist Python-Code, daher ist die Mutmaßung gar nicht mal so abwegig.

Über den Import zu Argumentieren finde ich eher langweilig. Ich importiere in meinen Programmen was ich will, da muss ich mir im Fall der Stdlib keine Sorgen machen ob es installiert ist oder nicht.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten