2016-02-29 252 views
0

我有这个名单是这样的:通过排序列表列

list1 = [["A",5,2,8,3],["B",9,5,1,5]] 

我试图用第二列排序。我期望list1然后是

[["B",9,5,1,5],["A",5,2,8,3]] 

因为9大于5对吗?我正在使用

sorted(lis1, key=lambda a : a[1]) 

但是它没有对它进行排序;它仍然和以前一样。为什么这不起作用?

+0

它通过默认按升序顺序。添加参数'reverse = True'到你的'sorted'函数来产生所需的输出 – gtlambert

回答

1

你只需要扭转这种局面:

list1 = [["A",5,2,8,3],["B",9,5,1,5]] 
list1 = sorted(list1, key=lambda a : a[1], reverse=True) 
print(list1) 
# outputs [["B",9,5,1,5],["A",5,2,8,3]] 

9> 5,所以说到后来,除非你扭转。

+0

试过了,它仍然没有改变.. – Alster

+0

奇怪......当我复制上面的代码并运行它时,它的工作原理 – rofls

+1

你确定你在做:'list1 = sorted(list1,key = lambda a:a [1],reverse = True)'? 'sorted'不修改列表,它返回一个修改的列表... – rofls

2

sorted

返回从项目的迭代

一个新的排序列表它确实排序到位。

0

使用operator.itemgetter()函数:

from operator import itemgetter 

list1 = [["A",5,2,8,3],["B",9,5,1,5],["C",1,2,8,3]] 

print(sorted(list1, key=itemgetter(1))) 
print(sorted(list1, key=itemgetter(1), reverse=True)) 

输出:

[['C', 1, 2, 8, 3], ['A', 5, 2, 8, 3], ['B', 9, 5, 1, 5]] 
[['B', 9, 5, 1, 5], ['A', 5, 2, 8, 3], ['C', 1, 2, 8, 3]]