2012-02-21 72 views
19
元組的列表

可能重複:
python: how to sort a complex list on two different keys排序取決於兩個因素

我有一個元組列表。我想根據兩個元素對它們進行排序。下面是下面的例子

unsorted = [('a', 4, 2), ('a', 4, 3), ('a', 7, 2), ('a', 7, 3), ('b', 4, 2), ('b', 4, 3), ('b', 7, 2), ('b', 7, 3)] 
sorted = [('a', 4, 2), ('b', 4, 2), ('a', 4, 3), ('b', 4, 3), ('a', 7, 2), ('b', 7, 2), ('a', 7, 3), ('b', 7, 3)] 

我知道如何給他們的第二個元素進行排序:

sorted(unsorted, key = lambda element : element[1]) 

但如何做到這一點有兩個鍵?

+2

由Python完成的排序是穩定的,這意味着您實際上可以對它進行兩次排序,首先是最不重要的元素,然後是最重要的元素。在某些情況下,這實際上可以更快(但只是一些時間)。 – 2012-02-21 19:58:03

回答

38
sorted(unsorted, key=lambda element: (element[1], element[2])) 

我已經從示例輸出假定了鍵的順序。

+2

可以排序(unsorted,key = lambda元素:(element [1:]))或排序(unsorted,key = lambda元素:(element [1:3]))更好 – pod2metra 2012-02-21 11:32:13

+2

@ pod2metra有很多可能性。可能最好的是'operator.itemgetter(1,2)'。 – 2012-02-21 12:35:44