2012-02-21 57 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