Как эффективно определить пользовательский глобальный компаратор в Python 3?

#python #python-3.x #sorting #comparison

#python #python-3.x #сортировка #сравнение

Вопрос:

Я хочу определить компаратор как:

 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:

Вы можете использовать лямбда-выражение для сопоставления ключевой функции (ранее компаратора) со вторым элементом каждого кортежа:

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