Ich habe eine Liste von Python-Objekten, die ich nach einem bestimmten Attribut jedes Objekts sortieren möchte:
[Tag(name="toe", count=10), Tag(name="leg", count=2), ...]
Wie sortiere ich die Liste nach .count
absteigend?
Ich habe eine Liste von Python-Objekten, die ich nach einem bestimmten Attribut jedes Objekts sortieren möchte:
[Tag(name="toe", count=10), Tag(name="leg", count=2), ...]
Wie sortiere ich die Liste nach .count
absteigend?
Wenn das Attribut, nach dem Sie sortieren möchten, eine Eigenschaft ist, können Sie das Importieren von operator.attrgetter
vermeiden und stattdessen die Methode fget
der Eigenschaft verwenden.
Zum Beispiel könnten wir für eine Klasse Kreis
mit einer Eigenschaft radius
eine Liste von Kreisen
nach Radien sortieren:
result = sorted(circles, key=Circle.radius.fget)
Dies ist nicht das bekannteste Feature, aber es spart mir oft eine Zeile beim Import.
Ich war überrascht, dass ich nicht einfach Circle.radius
setzen konnte. Ich verstehe nicht, warum es nicht funktioniert. Vielen Dank für den Hinweis, fget
zu verwenden. Ich mag es nicht, Lambdas zu definieren, wenn etwas anderes die Arbeit erledigen kann, und ich mag es nicht, die Namen von Attributen als Zeichenketten an attrgetter
zu übergeben, es fühlt sich einfach falsch an, für mich.
@PeterWood Der Schlüssel muss (1) aufrufbar sein, (2) ein Argument akzeptieren und (3) einen sortierbaren Wert zurückgeben. sortiert
nimmt jedes Element, das sortiert werden soll, gibt jedes davon nacheinander an den Schlüssel weiter und sortiert die zurückgegebenen Werte als Stellvertreter für die Elemente selbst. Circle.radius
funktioniert nicht, weil property
-Objekte selbst nicht aufrufbar sind. Aber sie haben ein Attribut namens fget
, das dies tut.
Fügen Sie den Objektklasse reiche Vergleichsoperatoren hinzu und verwenden Sie dann die sort() Methode der Liste.
Siehe reicher Vergleich in Python.
Aktualisierung: Obwohl diese Methode funktionieren würde, denke ich, dass die Lösung von Triptych besser für Ihren Fall geeignet ist, weil einfacher.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
2 Stimmen
Dupe: stackoverflow.com/questions/157424/…, stackoverflow.com/questions/222752/…, stackoverflow.com/questions/327191/…
7 Stimmen
Sortieranleitung für diejenigen, die mehr Informationen über das Sortieren in Python suchen.
1 Stimmen
Abgesehen von operator.attrgetter ('attribut_name') können Sie auch Funktoren als Schlüssel verwenden, wie z.B. object_list.sort(key=my_sorting_functor ('my_key')), wobei die Implementierung absichtlich ausgelassen wird.