Ale*_*ohr 0 python sorting lambda
我有一个活动类:
def Event:
def __init__(self, start, end, rule, location, summary):
...
#start, end, and rule are datetime.datetime objects
#location and summary are strings
Run Code Online (Sandbox Code Playgroud)
我有一系列事件,我想排序start,然后location
目前我正在对它们进行排序start:
events.sort(key=lambda e: e.start)
Run Code Online (Sandbox Code Playgroud)
如何按开始后按位置(字母数字,因为它是一个字符串)排序?
你只需要密钥就可以成为一个元组.利用元组的自然排序顺序.
events.sort(key=lambda e: (e.start, e.location))
Run Code Online (Sandbox Code Playgroud)
这不需要是lambda函数.事实上,有时最好使用命名函数,以便对其进行单元测试.例如.
def start_location_key(e):
return e.start, e.location
events.sort(key=start_location_key)
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您甚至可以使用attrgetter
from operator import attrgetter
events.sort(key=attrgetter('start', 'location'))
Run Code Online (Sandbox Code Playgroud)
所有这些都同样有效.但是第二个更灵活 - 你可以添加一个异常处理程序/调试它/ etc.更容易.