基于子数组的第二个元素对多维数组进行排序

Posted

技术标签:

【中文标题】基于子数组的第二个元素对多维数组进行排序【英文标题】:Sort multidimensional array based on 2nd element of the subarray 【发布时间】:2013-12-04 15:58:40 【问题描述】:

我有一个这样的数组:

[['G', 10], ['A', 22], ['S', 1], ['P', 14], ['V', 13], ['T', 7], ['C', 0], ['I', 219]]

我想根据第二个元素按降序对其进行排序。 理想的输出是:

[['I', 219], ['A', 22], ['P', 14], ... ]

【问题讨论】:

【参考方案1】:

list.sort, sorted 接受可选的key 参数。 key函数用于生成比较键。

>>> sorted(lst, key=lambda x: x[1], reverse=True)
[['I', 219], ['A', 22], ['P', 14], ['V', 13], ['G', 10], ...]

>>> sorted(lst, key=lambda x: -x[1])
[['I', 219], ['A', 22], ['P', 14], ['V', 13], ['G', 10], ...]

>>> import operator
>>> sorted(lst, key=operator.itemgetter(1), reverse=True)
[['I', 219], ['A', 22], ['P', 14], ['V', 13], ['G', 10], ...]

【讨论】:

太晚了,你能解释一下 lambda 函数的作用吗? lambda 的返回值将用作排序键。关于lambda本身,请阅读python文档:docs.python.org/3/tutorial/… operator.itemgetter(1) 比 lambda 快吗?【参考方案2】:

使用itemgetter

from operator import itemgetter
a = [[1, 3, 5], [2, 511, 7], [17, 233, 1]]
a = sorted(a, key=itemgetter(1))

输出:[[1, 3, 5], [17, 233, 1], [2, 511, 7]]

itemgetter也可以用于按多个子数组排序。

【讨论】:

【参考方案3】:

这样做:

多维数组以第2列为基础降序排列:

list_name.sort(key=lambda x:x[1],reverse=True)

【讨论】:

【参考方案4】:
x= [[8, 9, 7],
    [1, 2, 3],
    [5, 4, 3],
    [4, 5, 6]]
x.sort(cmp=lambda x,y: cmp(x[0],y[0]))
print x

【讨论】:

以上是关于基于子数组的第二个元素对多维数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

3.6 多维数组

PHP:按子数组的出现次数对多维数组进行排序

PowerShell foreach()基于第一个元素的多维数组

按子数组的大小对多维数组进行排序

JavaScript:自动对可变多维数组进行对角排序

PHP按包含日期的元素对多维数组进行排序