2011-11-27 18 views
5

値でソートされた順序付き辞書(OrderedDict)があります。どのようにしてトップ25キーの値を取得し、それを新しい辞書に追加できますか?たとえば :私はこのようなものがあります:オーダード・ディクショナリから別のものに最初のN個のキー・ペアを取得

frequent={'c':30,'b':20} 

dictionary={'a':10,'b':20,'c':30,'d':5} 
ordered=OrderedDict(sorted(dictionary.items(), key=lambda x: x[1],reverse=True)) 

orderedが、私は辞書を作成するよう命じ辞書たくさは、トップ2最も頻度の高い項目とその鍵を取って言います

答えて

12

OrderedDictの主な目的は、要素が作成された順序を保持することです。

>>> dictionary={'a':10,'b':20,'c':30,'d':5} 
>>> import collections 
>>> collections.Counter(dictionary).most_common(2) 
[('c', 30), ('b', 20)] 
+0

ありがとう、これは私が欲しかったものです。 –

+0

ありがとうございます。これはとても役に立ちました! –

2

タプルのリストを並べ替えから索引付けして、上位n番目の最も頻繁な項目とそのキーを取得しようとしましたか? あなたがトップ2で最も頻繁にアイテムが必要な場合たとえば、あなたが

dictionary={'a':10,'b':20,'c':30,'d':5} 
ordered=dict(sorted(dictionary.items(), key=lambda x: x[1],reverse=True)[:2]) 
+0

おかげで、動作します:あなたがここに欲しい は、ビルトインのn-最も頻度の高い機能を有し、collections.Counterです。 :) –

1

ordered.iteritems()方法からアイテムのイテレータを取得するかもしれません。

ここで最初のN個のアイテムを取得するには、itertoolsisliceメソッドを使用できます。

>>> import itertools 
>>> toptwo = itertools.islice(ordered.iteritems(), 2) 
>>> list(toptwo) 
[('c', 30), ('b', 20)] 
>>> 
4

既に持っている逆順の辞書の最初のN個のアイテム(キーペア)を使用して新しい辞書を作成してください。例えば、上位3項目は、あなたがこのような何かを行うことができます取得するには:Pythonの3 1の場合

from collections import OrderedDict 
from operator import itemgetter 

# create dictionary you have 
dictionary = {'a': 10, 'b': 20, 'c': 30, 'd': 5} 
ordered = OrderedDict(sorted(dictionary.items(), key=itemgetter(1), reverse=True)) 

topthree = dict(ordered.items()[:3]) 
print(topthree) # -> {'a': 10, 'c': 30, 'b': 20} 

dict(list(ordered.items())[:3])items()以来戻り、そのバージョンでイテレータを使用することができます。代わりに、dict(itertools.islice(ordered.items(), 3))をPython 2と3の両方で使用できます。

結果はちょうどあなたの質問で指定したように普通の辞書です。collections.Counterやその他のタイプのマッピングではありません。

関連する問題