python object list, sort in descending order based on object attribute
16,156
Specify reverse=True
argument:
list1 = sorted(list1, key=lambda object1: object1.fitness, reverse=True)
Demo (simple list of integers):
>>> l = [6, 0, 2, 3, 1, 5, 4]
>>> sorted(l)
[0, 1, 2, 3, 4, 5, 6]
>>> sorted(l, reverse=True)
[6, 5, 4, 3, 2, 1, 0]
Demo (datetime.dates, using operator.attrgetter
instead of lambda
as @SethMMorton suggested):
>>> from datetime import date
>>> from operator import attrgetter
>>> l = [date(2014, 4, 11), date(2014, 4, 2), date(2014, 4, 3), date(2014, 4, 8)]
>>> sorted(l, key=attrgetter('day'))
[datetime.date(2014, 4, 2),
datetime.date(2014, 4, 3),
datetime.date(2014, 4, 8),
datetime.date(2014, 4, 11)]
>>> sorted(l, key=attrgetter('day'), reverse=True)
[datetime.date(2014, 4, 11),
datetime.date(2014, 4, 8),
datetime.date(2014, 4, 3),
datetime.date(2014, 4, 2)]
Related videos on Youtube
Author by
Chris Headleand
Updated on October 06, 2022Comments
-
Chris Headleand over 1 year
I have a list of objects, which I need to sort by one of the objects attributes.
I can sort in ascending order with the following code
list1 = sorted(list1, key=lambda object1: object1.fitness)
However, this sorts the list by ascending order and what I need to do is sort by descending. Is this possible when sorting a list of objects?
-
SethMMorton about 10 yearsoperator.attrgetter instead of a lambda might also be useful
-
-
Luis Masuelli about 10 yearsanother alternative is using cmp_to_key helper function and creating your own object comparator
-
Chris Headleand about 10 yearsPerfect, cheers! just got to wait 6 mins before I can accept the answer haha