我正在尝试从大型(14米键)字典中获取具有最高值的九个键。
我使用以下命令返回九个键:
import heapq
def dict_nlargest(d,n):
return heapq.nlargest(n ,d, key = lambda k: d[k])
print dict_nlargest(mydict,9)
这有效,但我还要打印这些键的值。有没有办法用这种方法做到这一点?
答案 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)]