2013-10-29 45 views
0

名單我有一個事件類:排序「事件」的Python中

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) 

如何排序位置(字母數字,因爲它是一個字符串)後啓動?

+2

'events.sort(key = lambda e:(e.start,e.location))' – falsetru

回答

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

所有這些工作同樣出色。然而第二個更靈活 - 你可以添加一個異常處理程序/ debug it/etc。更容易。

+0

偉大的工作。我對lambdas很新鮮.. –