0

我有一个事件类:

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)

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

4

1 回答 1

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'))

所有这些都同样有效。但是第二个更灵活 - 您可以添加异常处理程序/调试它/等。更容易。

于 2013-10-29T04:00:22.517 回答