在Python中对"事件"列表进行排序

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)

如何按开始后按位置(字母数字,因为它是一个字符串)排序?

Joh*_*ooy 7

你只需要密钥就可以成为一个元组.利用元组的自然排序顺序.

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.更容易.