我们可以根据几个属性对列表进行排序吗?

时间:2019-04-30 19:15:02

标签: python

因此,我们假设有以下列表:

data=[[A, 5, 200], [B, 5, 220], [C, 4, 150], [D, 4, 150], [E, 1, 50]]

,我们想用第一个数字(升序)对它进行排序,如果是平局,则使用第二个数字(降序),如果再次是平局,则按字母顺序进行排序。 我尝试了这段代码,但没有用:

data = sorted(data, key = operator.itemgetter(1, 2))

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

通常,您需要一个易于使用functools.cmp_to_key定义的键功能:

# Quick and dirty definition of cmp for Python 3
def cmp(a, b):
    """Return 0 if a == b, negative if a < b, and positive if a > b"""
    return (a > b) - (a < b)

def compare(a, b):
    return (cmp(a[1], b[1]) 
            or cmp(b[2], a[2])  # swap arguments for reversed ordering
            or cmp(a[0], b[0]))

sorted(data, key=functools.cmp_to_key(compare))

但是,您可以利用以下事实:对于数字,a < b意味着-a > -b来写

sorted(data, key=lambda a: (a[1], -a[2], a[0]))