0

大きな (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)

これは機能しますが、これらのキーの値も出力したいと思います。この方法を使用してそれを行う方法はありますか?

4

1 に答える 1

2

通常、 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)]
于 2013-06-23T19:59:45.337 に答える