Ключевая функция для heapq.nlargest()

У меня есть словарь с {key: count}, сказатьstatus_count = {'MANAGEMENT ANALYSTS': 13859, 'COMPUTER PROGRAMMERS': 72112}и я пытаюсь написать ключевую функцию для heapq.nlargest(), которая сортирует по количеству, и если есть связи, я должен сортировать по алфавиту (az) ключей. Я должен использовать heapq.nlargest из-за очень большого N и малого k = 10.

Это то, что я получил до сих пор,

top_k_results = heapq.nlargest(args.top_k, status_count.items(), key=lambda item: (item[1], item[0])) Но это было бы неправильно в случае разрыва связей в алфавитном порядке. Пожалуйста помоги!

1 ответ

Решение

Простейшим может быть переключение на heapq.nsmallest и переопределите ваш ключ сортировки:

from heapq import nsmallest

def sort_key(x):
    return -x[1], x[0]

top_k_results = nsmallest(args.top_k, status_count.items(), key=sort_key)

Кроме того, вы можете использовать ord и возьмите минус в порядке возрастания:

from heapq import nlargest

def sort_key(x):
    return x[1], [-ord(i) for i in x[0]]

top_k_results = nlargest(args.top_k, status_count.items(), key=sort_key)

Не забудьте использовать str.casefold если вам нужно нормализовать регистр вашей строки.

Другие вопросы по тегам