这篇文章与如何在Python中按字典的值对字典列表进行排序?不同,我认为无法使用lambda sort解决该问题,因为应该在两个属性上进行排序,一个升序,另一个降序。
但是输出结果是:
代码如下:
我认为答案应该是:
按第二列降序排列,按第三列升序排列
[1, 5, 7]
[2, 3, 4]
[3, 2, 2]
[1, 2, 3]
[4, 2, 9]
[3, 1, 9]
但是输出结果是:
[1, 5, 7]
[2, 3, 4]
[1, 2, 3]
**[3, 2, 2]** i think it's wrong here
[4, 2, 9]
[3, 1, 9]
代码如下:
l=[
[1,2,3],
[2,3,4],
[1,5,7],
[3,1,9],
[3,2,2],
[4,2,9]
]
def printlist(l):
for ll in l:
print ll
def comp1(a,b):
if a[1]<b[1]:
return 1
if a[1]==b[1]:
return a[2]>b[2]
else:
return -1
l3=sorted(l,cmp=comp1)
printlist(l3)
那么为什么程序输出了错误的答案?
Edit1:
这里我选择使用cmp
而不是key=itemgetter(2,3)
,因为可能会有更复杂的结构,无法使用itemgetter
进行排序,只能使用cmp
函数进行排序。
cmp
已经在 Python3 中被移除,原因是一切都可以通过使用key
来完成,并且更加高效。 - Ashwini Chaudhary