ключевая функция для heapq.nlargest () - PullRequest
0 голосов
/ 30 октября 2018

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

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

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

1 Ответ

0 голосов
/ 30 октября 2018

Простейшим может быть переключение на 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, если вам нужно нормализовать регистр вашей строки.

...