如何根据子列表中的值对列表进行排序?

时间:2014-02-12 04:40:51

标签: python list sorting

所以我有一个看起来像这样的列表:

example = [['b',1],['b',2],['a',2]]

它需要排序成:

example = [['b',1],['a',2],['b',2]]

即。按[1]位置的数字按数字排序。程序需要识别何时有两个相同的数字,然后按字母顺序对这些元素进行排序。

有什么想法吗?

编辑:

我将如何对列表进行排序,以便首先打印最高的数字?,即:

example = [['a',2],['b',2],['b',1]]

3 个答案:

答案 0 :(得分:5)

您可以使用list.sortkey functionoperator.itemgetter

>>> from operator import itemgetter
>>> example = [['b',1],['b',2],['a',2]]
>>> example.sort(key=itemgetter(1,0))
>>> example
[['b', 1], ['a', 2], ['b', 2]]
>>>

您还可以使用lambda代替operator.itemgetter

example.sort(key=lambda x: (x[1], x[0]))

但那会慢一些。

答案 1 :(得分:3)

>>> lis = [['b',1],['b',2],['a',2]]
>>> sorted(lis, key=lambda x:x[::-1])
[['b', 1], ['a', 2], ['b', 2]]

要使用lis.sort(...)就地对列表进行排序。

答案 2 :(得分:3)

这是一个巧妙的技巧

>>> example = [['b',1],['b',2],['a',2]]
>>> sorted(example, key=sorted)
[['b', 1], ['a', 2], ['b', 2]]

仅适用于Python2


有两种方法可以按数字从最高到最低排序

>>> sorted(example, key=lambda x: (-x[1], x[0]))
[['a', 2], ['b', 2], ['b', 1]]

>>> from operator import itemgetter
>>> sorted(sorted(example), key=itemgetter(1), reverse=True)
[['a', 2], ['b', 2], ['b', 1]]