Python - 按多列索引排序列表列表

时间:2016-03-21 11:33:50

标签: python sorting multiple-columns

假设我在Python中有以下列表x

[['a',6,'aa']
['d',7,'bb']]
['c',1,'cc']
['a',4,'dd']
['d',2,'ee']]

我希望对其元素进行排序以获得以下结果

[['a',4,'dd']
['a',6,'aa']
['c',1,'cc']
['d',2,'ee']
['d',7,'bb']]

我希望按两列排序,第一列(最重要)和第二列(不太重要)。这可能是一个重复的问题,但我找不到解决方案......

3 个答案:

答案 0 :(得分:3)

以下按第一个元素排序列表,然后按第二个元素排序:

>>> sorted(a, key=lambda x:(x[0], x[1]))
[['a', 4, 'dd'], ['a', 6, 'aa'], ['c', 1, 'cc'], ['d', 2, 'ee'], ['d', 7, 'bb']]

答案 1 :(得分:1)

由于您是否按第三列排序并不重要,您可以在此处使用普通sort,并获得相同的结果:

>>> sorted(a)
[['a', 4, 'dd'], ['a', 6, 'aa'], ['c', 1, 'cc'], ['d', 2, 'ee'], ['d', 7, 'bb']]

这是因为列表从左到右进行比较,并按字典顺序排序。

如果您确实想按任意列顺序排序,则应使用operator.itemgetter,这比使用lambda的{​​{1}}函数要快。

key

答案 2 :(得分:0)

如果从第一个元素到最后一个元素应用排序,您只需使用sorted作为sorted自动处理。

a = [['a',6,'aa'],['d',7,'bb'],['c',1,'cc'],['a',4,'dd'],['d',2,'ee']]
sorted(a)

[['a', 4, 'dd'],
['a', 6, 'aa'],
['c', 1, 'cc'],
['d', 2, 'ee'],
['d', 7, 'bb']]