如何打印heapq返回的键值?

时间:2013-06-23 19:48:35

标签: python-2.7 dictionary

我正在尝试从大型(14米键)字典中获取具有最高值的九个键。

我使用以下命令返回九个键:

import heapq

def dict_nlargest(d,n):
    return heapq.nlargest(n ,d, key = lambda k: d[k])

print dict_nlargest(mydict,9)

这有效,但我还要打印这些键的值。有没有办法用这种方法做到这一点?

1 个答案:

答案 0 :(得分:2)

通常,迭代dict迭代其键,因此只有那些将在堆中。您可以使用items()或(最好)iteritems()来更改它。然后迭代(键,值)tuple s。密钥(用于比较)应该只是值,可以使用lambda x: x[1]或{稍微更快»使用operator.itemgetter来实现。

import heapq
from operator import itemgetter

def dict_nlargest_items(d,n):
    return heapq.nlargest(n, d.iteritems(), key=itemgetter(1))

mydict = {'a': 1, 'b': 2, 'c': 3}

print dict_nlargest_items(mydict, 2) # [('c', 3), ('b', 2)]

当然,没有必要进行这种调整。获得密钥后,您始终可以查找值:

print [(k, mydict[k]) for k in dict_nlargest(mydict, 2)] # [('c', 3), ('b', 2)]