因此,我们假设有以下列表:
data=[[A, 5, 200], [B, 5, 220], [C, 4, 150], [D, 4, 150], [E, 1, 50]]
,我们想用第一个数字(升序)对它进行排序,如果是平局,则使用第二个数字(降序),如果再次是平局,则按字母顺序进行排序。 我尝试了这段代码,但没有用:
data = sorted(data, key = operator.itemgetter(1, 2))
有更好的方法吗?
答案 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]))