如何在Python 3中有效定义自定义全局比较器?

时间:2019-04-05 15:27:59

标签: python python-3.x sorting comparison

我想定义比较器,例如:

def cmp_smth(x, y):
    if x == y:
        return 0
    elif fn(x, y):
        return -1
    else:
        return 1
comparator = functools.cmp_to_key(cmp_smth)

它可以与cmp_to_key转换器一起正常工作,即:

sorted([x, y, z], key=comparator)

但是,如果我想对更复杂的东西(即元组)进行排序怎么办?

sorted([(1, x), (2, y), (3, z)], key=???)

在这种情况下如何使用我的全局比较器?

1 个答案:

答案 0 :(得分:4)

您可以使用lambda将键函数(以前是比较器)映射到每个元组的第二个元素:

sorted([(1, x), (2, y), (3, z)], key=lambda x: comparator(x[1]))