44

私は次のものを持っていますOrderedDict

OrderedDict([('r', 1), ('s', 1), ('a', 1), ('n', 1), ('y', 1)])

これは実際に単語内の文字の頻度を表します。

最初のステップでは、最後の 2 つの要素を使用して、このようなユニオン タプルを作成します。

 pair1 = list.popitem()
    pair2 = list.popitem()
    merge_list = (pair1[0],pair2[0])
    new_pair = {}
    new_pair[merge_list] = str(pair1[1] + pair2[1])
    list.update(new_pair);

これにより、次の OrderedList が作成されました。

OrderedDict([('r', 1), ('s', 1), ('a', 1), (('y', 'n'), '2')])

ここで、要素を繰り返し処理し、毎回最後の 3 つを取得し、値の合計の下限に基づいてユニオン オブジェクトを決定します。

たとえば、上記のリストは次のようになります。

OrderedDict([('r', 1), (('s', 'a'), '2'), (('y', 'n'), '2')])

しかし、上記は:

OrderedDict([ ('r', 1), ('s', 2), ('a', 1), (('y', 'n'), '2')])

結果は次のようになります。

OrderedDict([('r', 1), ('s', 2), (('a','y', 'n'), '3')])

左のものの値を小さくしたいので

私は自分でやろうとしましたが、OrderedDict を最初から最後まで繰り返す方法がわかりません。

どうすればいいですか?

EDITED コメントに答える:

文中の文字の頻度の辞書を取得します。

{ 's':1, 'a':1, 'n':1, 'y': 1}

そこからハフマン木を作成する必要があります。

例えば:

((s,a),(n,y))

私はpython 3.3を使用しています

4

5 に答える 5

67

簡単な例

from collections import OrderedDict

d = OrderedDict()
d['a'] = 1
d['b'] = 2
d['c'] = 3

for key, value in d.items():
    print key, value

出力:

a 1
b 2
c 3
于 2016-02-19T04:26:02.437 に答える
12

OrderedDict を最初から最後まで反復する方法は?

また:

z = OrderedDict( ... )
for item in z.items()[::-1]:
   # operate on item

または:

z = OrderedDict( ... )
for item in reversed(z.items()):
   # operate on item
于 2014-01-07T22:31:55.250 に答える