我正在尝试从大型(14m 键)字典中获取具有最高值的九个键。
我正在使用以下内容返回九个键:
import heapq
def dict_nlargest(d,n):
return heapq.nlargest(n ,d, key = lambda k: d[k])
print dict_nlargest(mydict,9)
这可行,但我也想打印这些键的值。有没有办法使用这种方法来做到这一点?
我正在尝试从大型(14m 键)字典中获取具有最高值的九个键。
我正在使用以下内容返回九个键:
import heapq
def dict_nlargest(d,n):
return heapq.nlargest(n ,d, key = lambda k: d[k])
print dict_nlargest(mydict,9)
这可行,但我也想打印这些键的值。有没有办法使用这种方法来做到这一点?
通常,迭代 adict
会迭代它的键,所以只有那些会在堆中。您可以使用items()
or (preferably)来改变它iteritems()
。然后迭代 (key, value) 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)]