Python - 按多列索引对列表进行排序
Python - order list of lists by multiple column indexes
假设我在 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']]
也就是说,我想按两列对其进行排序,第一列(最重要)和第二列(次要)。这可能是一个重复的问题,但我一直无法找到解决方案...
以下列表按第一个元素排序,然后按第二个元素排序:
>>> sorted(a, key=lambda x:(x[0], x[1]))
[['a', 4, 'dd'], ['a', 6, 'aa'], ['c', 1, 'cc'], ['d', 2, 'ee'], ['d', 7, 'bb']]
因为你是否也按第三列排序并不重要,你可以在这里使用普通的 sort
,并得到相同的结果:
>>> sorted(a)
[['a', 4, 'dd'], ['a', 6, 'aa'], ['c', 1, 'cc'], ['d', 2, 'ee'], ['d', 7, 'bb']]
这是因为列表是从左到右比较并按字典顺序排序的。
如果您确实想按任意列顺序排序,您应该使用 operator.itemgetter
,这比对 key
.
使用 lambda
函数更快
>>> import operator
>>> sorted(a, key=operator.itemgetter(1, 0)) # order by column 1 first, then 0.
[['c', 1, 'cc'], ['d', 2, 'ee'], ['a', 4, 'dd'], ['a', 6, 'aa'], ['d', 7, 'bb']]
您可以简单地使用 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']]
假设我在 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']]
也就是说,我想按两列对其进行排序,第一列(最重要)和第二列(次要)。这可能是一个重复的问题,但我一直无法找到解决方案...
以下列表按第一个元素排序,然后按第二个元素排序:
>>> sorted(a, key=lambda x:(x[0], x[1]))
[['a', 4, 'dd'], ['a', 6, 'aa'], ['c', 1, 'cc'], ['d', 2, 'ee'], ['d', 7, 'bb']]
因为你是否也按第三列排序并不重要,你可以在这里使用普通的 sort
,并得到相同的结果:
>>> sorted(a)
[['a', 4, 'dd'], ['a', 6, 'aa'], ['c', 1, 'cc'], ['d', 2, 'ee'], ['d', 7, 'bb']]
这是因为列表是从左到右比较并按字典顺序排序的。
如果您确实想按任意列顺序排序,您应该使用 operator.itemgetter
,这比对 key
.
lambda
函数更快
>>> import operator
>>> sorted(a, key=operator.itemgetter(1, 0)) # order by column 1 first, then 0.
[['c', 1, 'cc'], ['d', 2, 'ee'], ['a', 4, 'dd'], ['a', 6, 'aa'], ['d', 7, 'bb']]
您可以简单地使用 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']]