2017-02-10 3 views
1

Etwas anders als previous questions. Ich habe hier gefunden: front_Ar ist eine Liste von Objekten mit einem score Attribut.Ruft eine Liste von Objekten mit dem maximalen Attributwert in einer Liste von Objekten ab.

Ich versuche eine Liste aller Objekte mit der höchsten Punktzahl zu bekommen. Ich habe versucht:

maxind = [] 
maxInd.append(max(front_Ar, key=attrgetter('score'))) 

, die nur ein Objekt (gefunden vermutlich den ersten it) gespeichert. Irgendeine Idee, wie dies getan werden kann?

Antwort

3

Finden Sie den max Punktzahl zuerst, filtert dann die Liste auf diesen Punkten:

max_score = max(front_Ar, key=attrgetter('score')).score 
max_ind = [obj for obj in front_Ar if obj.score == max_score] 
0

Die max() Funktion verwendet werden kann, den Wert des höchsten Punktzahl zu finden.

Um Objekte zu erhalten, deren Ergebnis mit diesem Wert übereinstimmt, können Sie ein Listenverständnis wie in @ juanpa.arrivillagas Antwort verwenden oder in der Liste nur filter() verwenden, um nur die Elemente zurückzugeben, die Ihrem Kriterium entsprechen.

top_score = max(front_Ar, key=attrgetter('score')).score 
max_ind = list(filter(lambda x: x.score == top_score, front_Ar)) 
Verwandte Themen