我有以下格式的列表列表:
[['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]]
谢谢!
答案 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]]]
列表按顺序比较它们的元素,就像词典或常规字典一样。它被称为“词法比较”。