如何通过检查python中子列表中的值来对列表进行排序?

时间:2011-05-20 08:03:45

标签: python list sorting

我有以下格式的列表列表:

[['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10]], ['e',[5,1,-1]]]

我想在python中使用数字列表元素进行排序,匹配第一个元素,当它相同时,使用第二个,依此类推。 结果会是这样的(我这次需要反向订单):

['a',[10]]
['c',[5,10]]
['e',[5,1,-1]]
['d',[5,1,-10]
['b',[1]]

谢谢!

3 个答案:

答案 0 :(得分:5)

我认为列表比较你想要的,默认情况下,如果倒置:

>>> data = [['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10]], ['e',[5,1,-1]]
>>> sorted(data, reverse = True, key = lambda pair: pair[1])
[['a', [10]], ['c', [5, 10]], ['e', [5, 1, -1]], ['d', [5, 1, -10]], ['b', [1]]]

您的输入列表中出现了包围错误,它已在上面的代码中修复。

答案 1 :(得分:1)

>>> from operator import itemgetter
>>> L=[['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10]], ['e',[5,1,-1]]]
>>> sorted(L, key=itemgetter(1), reverse=True)
[['a', [10]], ['c', [5, 10]], ['e', [5, 1, -1]], ['d', [5, 1, -10]], ['b', [1]]]
>>> 

我在这里使用itemgetter(1),这大致相当于其他答案中的lambda函数。这有效地进行排序,其中键是子列表,因为它们是项目编号1.(项目编号0是字母a-e)

答案 2 :(得分:0)

使用key选择列表中的第二个元素,并reverse更改方向:

>>> l=[['a',[10]], ['b',[1]], ['c',[5,10]], ['d',[5,1,-10], ['e',[5,1,-1]]]
>>> sorted(l, key=lambda e:e[1], reverse=True)
[['a', [10]], ['c', [5, 10]], ['e', [5, 1, -1]], ['d', [5, 1, -10]], ['b', [1]]]

列表按顺序比较它们的元素,就像词典或常规字典一样。它被称为“词法比较”。