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)]
Share:
16,156

Related videos on Youtube

Chris Headleand
Author by

Chris Headleand

Updated on October 06, 2022

Comments

  • Chris Headleand
    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
      SethMMorton about 10 years
      operator.attrgetter instead of a lambda might also be useful
  • Luis Masuelli
    Luis Masuelli about 10 years
    another alternative is using cmp_to_key helper function and creating your own object comparator
  • Chris Headleand
    Chris Headleand about 10 years
    Perfect, cheers! just got to wait 6 mins before I can accept the answer haha