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

时间:2013-10-29 03:59:02

标签: 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

我有一系列事件,我想按start排序,然后按location

排序

目前我按start对它们进行排序:

events.sort(key=lambda e: e.start)

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

1 个答案:

答案 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。更容易。