heapq.nlargest() 的关键函数
key function for heapq.nlargest()
我有一本 {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]))
但是,如果按字母顺序打破关系,这将是不正确的。请帮忙!
最简单的可能是切换到 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
。
我有一本 {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]))
但是,如果按字母顺序打破关系,这将是不正确的。请帮忙!
最简单的可能是切换到 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
。