我有一个名为results的Python列表。在results列表中的每个结果都有一个人对象,而每个人对象都有一个生日(result.person.birthdate)。生日是一个datetime对象。
我想按照生日从旧到新对列表进行排序。最Pythonic的方法是什么?
results.sort(key=lambda r: r.person.birthdate)
完全同意Amber的观点,但是还有另一种按属性排序的方法(从维基百科获取:https://wiki.python.org/moin/HowTo/Sorting):
from operator import attrgetter
sorted_list = sorted(results, key=attrgetter('person.birthdate'))
这种方法实际上甚至可以比使用 lambda
进行排序更快。
'person.birdate'
作为变量传递,attrgetter()
很方便。否则,lambda
更加灵活(例如,如果person
有时候是None
),而在大多数情况下时间差异应该可以忽略不计。 - jfs
reverse=True
。 - rlibbyresults.sort(key=lambda r: getattr(r.person, 'birthday', datetime.max))
- jfssorted(results, key=...)
。 - Paulo Scardine