10

OrderedDict値でソートされた順序付き辞書( )があります。上位(たとえば25)のキー値を取得して新しい辞書に追加するにはどうすればよいですか?例:私は次のようなものを持っています:

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

これで順序付けられた辞書になりましorderedた。たとえば、最も頻繁に使用される上位2つの項目とそのキーを使用して、辞書を作成します。

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

4 に答える 4

16

の主な目的はcollections.OrderedDict、要素が挿入された順序を保持することです。
ここで必要なcollections.Counterのは、n個の最も頻繁な機能が組み込まれていることです。

>>> dictionary={'a':10,'b':20,'c':30,'d':5}
>>> import collections
>>> collections.Counter(dictionary).most_common(2)
[('c', 30), ('b', 20)]
于 2011-11-28T18:04:51.140 に答える
6

すでに持っている(逆順)辞書の最初のN項目(キーペア)を使用して、新しい辞書を作成するだけです。たとえば、上位3つのアイテムを取得するには、次のようにします。

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}

Python 3の場合、そのバージョンでイテレータを返すため、dict(list(ordered.items())[:3])使用できます。または、Python2と3の両方で機能するものをitems()使用することもできます。dict(itertools.islice(ordered.items(), 3))

collections.Counterまた、結果は、質問で指定した通常の辞書であり、または他のタイプのマッピングではないことに注意してください。dictionaryこのアプローチは非常に一般的であり、元の値が整数値である必要はありません。順序付けすることができます(つまり、key関数を介して比較できます)。

于 2011-11-27T17:05:27.713 に答える
3

ソートされたタプルのリストにインデックスを付けて、上位n番目に頻度の高いアイテムとそのキーを取得しようとしましたか?たとえば、最も頻繁に使用される上位2つのアイテムが必要な場合は、次のようにします。

dictionary={'a':10,'b':20,'c':30,'d':5}
ordered=dict(sorted(dictionary.items(), key=lambda x: x[1],reverse=True)[:2])
于 2011-11-27T16:27:28.643 に答える
1

メソッドからアイテムのイテレータを取得しますordered.iteritems()

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

>>> import itertools
>>> toptwo = itertools.islice(ordered.iteritems(), 2)
>>> list(toptwo)
[('c', 30), ('b', 20)]
>>>
于 2011-11-27T16:33:17.623 に答える