Как временное решение, я думаю, что все в порядке.
Если у вас есть несколько комбинаций custom_compare
и custom_key_getter
, я бы выделил лямбду как
def compare_using(custom_compare, custom_key_getter):
def comparator(x, y):
return custom_compare(custom_key_getter(x), custom_key_getter(y))
return comparator
Если у вас есть только несколько комбинаций, я могу представить, что они будут предварительно вычислены, например,
compare_names_special = compare_using(compare_special, itemgetter('name'))
...
customers_by_name = sorted(customers, compare_names_special)
Производительность не должна быть затронута, потому что этот код просто показывает, что сортировка Python 2 все равно делала в тайне.
В более долгосрочной перспективе я хотел бы переписать пользовательские функции сравнения, чтобы они не нуждались в обработке cmp_to_key
; в большинстве случаев это должно быть тривиально.