不同的顺序排序列表中的不同元素

时间:2013-02-27 12:10:37

标签: python list sorting

我有一份清单,

  

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]

3 个答案:

答案 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))