大きな (14m キー) 辞書から最高値を持つ 9 つのキーを取得しようとしています。
以下を使用して 9 つのキーを返します。
import heapq
def dict_nlargest(d,n):
return heapq.nlargest(n ,d, key = lambda k: d[k])
print dict_nlargest(mydict,9)
これは機能しますが、これらのキーの値も出力したいと思います。この方法を使用してそれを行う方法はありますか?
大きな (14m キー) 辞書から最高値を持つ 9 つのキーを取得しようとしています。
以下を使用して 9 つのキーを返します。
import heapq
def dict_nlargest(d,n):
return heapq.nlargest(n ,d, key = lambda k: d[k])
print dict_nlargest(mydict,9)
これは機能しますが、これらのキーの値も出力したいと思います。この方法を使用してそれを行う方法はありますか?
通常、 a をdict
反復するとそのキーが反復されるため、それらのみがヒープに含まれます。items()
または (できれば)を使用して変更できますiteritems()
。次に、 (key, value) を反復処理しますtuple
。キー (比較用) は値のみである必要があります。これは、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)]