2013-04-24 59 views
6

如果我有一个号码列表[4,2,5,1,3] 我想首先通过某个函数f对它进行排序,然后对于具有相同值f的数字,我希望它按数字的大小排序。如何在python中执行二次排序?

此代码似乎没有工作。

list5 = sorted(list5) 
list5 = sorted(list5, key = lambda vertex: degree(vertex)) 

二次排序第一:list5是根据量级排序的。 主要排序next:list5基于数字的某个函数进行排序。由(firstkey,secondkey)

+1

顺便说一句,你可以做'键= degree',这里的'lambda'是多余的 – GP89 2013-04-24 13:44:20

+0

当你说“似乎并不奏效”,是什么你观察到了吗? – ecatmur 2014-08-26 09:42:18

回答

30

排序它元组:

sorted(list5, key=lambda vertex: (degree(vertex), vertex)) 
+0

要做一个升序和另一个降序,两个调用:list5.sort(key = lambda vertex:vertext,reverse = True)list5.sort(key = lambda vertex:degree(vertext)) – 2017-11-29 22:07:24

+0

我明白了这是为什么一个非常可读的解决方案,是一个非常有效的解决方案吗?不用自己编码,即不需要计算第二个值。 – borgr 2018-01-08 13:41:28

2

在手机上,但元组遵守前面排序。

sorted(list5, lambda x: (degree(x),x)) 

如果你需要它,不要忘了反转标记。

1

从Python 3文档上sorting

from operator import itemgetter, attrgetter 
student_objects = [ 
    Student('john', 'A', 15), 
    Student('jane', 'B', 12), 
    Student('dave', 'B', 10), 
] 
student_tuples = [ 
    ('john', 'A', 15), 
    ('jane', 'B', 12), 
    ('dave', 'B', 10), 
] 

#The operator module functions allow multiple levels of sorting. For example, to sort by grade then by age: 

sorted(student_tuples, key=itemgetter(1,2)) 
sorted(student_objects, key=attrgetter('grade', 'age')) 
相关问题