Python sorted () с помощью itemgetter и Comparer - PullRequest
2 голосов
/ 15 апреля 2019

У меня есть функция сравнения, которая заключена в functools.cmp_to_key, поэтому я могу использовать ее при вызове sorted().

Проблема в том, что я уже использую itemgetter в качестве ключа.Itemgetter используется для извлечения значения из словаря, и это значение используется для сортировки коллекции.

Итак, по сути, мне нужно использовать itemgetter для извлечения значений, а затемМне нужно использовать функцию сравнения, чтобы правильно их отсортировать.

Я пробовал следующие комбинации, но, похоже, ни одна из них не работает:

for x in range( 0, len(sort_columns) ):
  comparer = cmp_to_key(sort_columns[x].sort_func)
  results = sorted( data, key=comparer )
  results = sorted( data, key=comparer(itemgetter( sort_columns[x] ) ) )
  results = sorted( data, key=itemgetter( comparer( sort_columns[x] ) ) )

В тех случаях, когда конкретный компаратор не требуется, это просто называется:

results = sorted( data, key=itemgetter( sort_columns[x] ) )

1 Ответ

2 голосов
/ 15 апреля 2019

Вам нужно составить геттер и компаратор.Что-то с эффектом:

for columns in sort_columns: # don't use a range loop unless you need to
    comparer = cmp_to_key(columns.sort_func)
    getter = itemgetter(columns)
    data = sorted(data, key=lambda x: comparer(getter(x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...