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