Ключевая функция для 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
если вам нужно нормализовать регистр вашей строки.