0

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

我正在使用以下内容返回九个键:

import heapq

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

print dict_nlargest(mydict,9)

这可行,但我也想打印这些键的值。有没有办法使用这种方法来做到这一点?

4

1 回答 1

2

通常,迭代 adict会迭代它的键,所以只有那些会在堆中。您可以使用items()or (preferably)来改变它iteritems()。然后迭代 (key, value) tuples。关键(用于比较)应该只是值,可以使用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)]
于 2013-06-23T19:59:45.337 回答