我有一份清单,
mylist = [['zzz',100],['sss',100],['555',100],['222',100],['333',90]]
这是基于使用以下函数的排序(降序)列表
排序(mylist,key = lambda x:(x [1],x [0]),reverse = True)
我想以这种方式对此进行排序,以便得到以下顺序
[['222',100],['555',100],['sss',100],['zzz',100],['333',90]]
按分数x [1]排序desc
,其中asc
顺序为x [0]
答案 0 :(得分:6)
你很亲密幸运。
幸运因为:
您至少有一个数值,您可以否定创建不同的订单
关闭因为,
那就是你缺少的东西
>>> mylist = [['zzz', 100], ['sss', 100], ['555',100], ['222',100], ['333',90]]
>>> sorted(mylist, key = lambda e: (-e[1], e[0]))
[['222', 100], ['555', 100], ['sss', 100], ['zzz', 100], ['333', 90]]
>>>
答案 1 :(得分:3)
如果您需要颠倒数字字段的顺序,只需将其否定
,这很容易>>> mylist = [['zzz', 100], ['sss', 100], ['555',100], ['222',100], ['333',90]]
>>> sorted(mylist, key=lambda x:(-x[1], x[0]))
[['222', 100], ['555', 100], ['sss', 100], ['zzz', 100], ['333', 90]]
如果你必须排序两个字符串字段,一个是升序,一个是降序not quite so easy
答案 2 :(得分:3)
如果您不能使用否定,例如所有元素都是字符串,您可以创建比较函数,并使用functools.cmp_to_key
将其转换为关键函数。
from functools import cmp_to_key
mylist = [['zzz', 100], ['sss', 100], ['555',100], ['222',100], ['222',90]]
def f(a, b):
return cmp(a[0], b[0]) or -cmp(a[1], b[1])
sorted(mylist, key=cmp_to_key(f))