heapq.nlargest()的关键函数

时间:2018-10-30 10:23:38

标签: python python-3.x lambda heap python-collections

我有一本{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 :(得分: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