Seite 1 von 1
Liste nach Attributen sortieren...
Verfasst: Freitag 4. März 2011, 11:34
von mutetella
Hallo,
ich möchte eine Liste 'entries' mit Entry()-Exemplaren nach einem bestimmten Attribut sortieren. Folgendes funktioniert, wenn die Exemplare eine Methode 'get_title()' besitzen:
Ich würde aber etwas in der Art, allerdings ohne den Umweg über ein lambda, bevorzugen:
Was könnte ich machen?
Gruß
mutetella
Re: Liste nach Attributen sortieren...
Verfasst: Freitag 4. März 2011, 11:50
von frabron
Bei sorted kannst du doch auch eine Comparison Funktion angeben, die das Vergleichen übernimmt. Oder, das musst du aber testen, du implementierst __lt__, __gt__ usw. auf dem Objekt
Re: Liste nach Attributen sortieren...
Verfasst: Freitag 4. März 2011, 11:53
von EyDu
Re: Liste nach Attributen sortieren...
Verfasst: Freitag 4. März 2011, 12:00
von frabron
Code: Alles auswählen
class Itr(object):
def __init__(self, val):
self.cmp = val
def __gt__(self, other):
return self.cmp > other.cmp
def __eq__(self, other):
return self.cmp == other.cmp
def __lt__(self, other):
return self.cmp < other.cmp
foo = sorted([Itr(3), Itr(1), Itr(10), Itr(4)])
print [a.cmp for a in foo]
funktioniert soweit bei mir. K.A., ob dir das hilft ...
Re: Liste nach Attributen sortieren...
Verfasst: Freitag 4. März 2011, 12:50
von mutetella
@frabron:
Danke für Dein Beispiel! Ich hab' mir auch EyDu's Vorschlag mit operator.attrgetter angesehen und finde, dass eine Lösung damit einfacher und laut Doku auch schneller ist.
Zudem müsste ich mit Deiner Lösung das Sortierkriterium, das nicht immer gleich ist, im Exemplar festlegen was IMHO nicht so schön ist als selbiges 'von außen' zu bestimmen.
Gruß
mutetella
Re: Liste nach Attributen sortieren...
Verfasst: Freitag 4. März 2011, 13:32
von frabron
EyDu und mich trennen wohl ca. Äonen an Programmiererfahrung
Ich wusste einfach nicht, ob mein Vorschlag mit den Vergleichsoperatoren auf dem Objekt funktioniert, deshalb hab ich ihn halt flott ausprobiert und das Resultat für die Nachwelt erhalten

Nicht, dass ich es nicht geahnt hätte, aber man weiss ja nie

Re: Liste nach Attributen sortieren...
Verfasst: Freitag 4. März 2011, 14:10
von EyDu
@frabron: Du kannst sogar noch ein wenig vereinfachen:
Code: Alles auswählen
>>> class Spam(object):
... def __init__(self, eggs):
... self.eggs = eggs
... def __cmp__(self, other):
... return cmp(self.eggs, other.eggs)
... def __repr__(self):
... return "%s(%r)" % (self.__class__.__name__, self.eggs)
...
>>> sorted([Spam(42), Spam(23), Spam(30), Spam(7)])
[Spam(7), Spam(23), Spam(30), Spam(42)]