私は次のものを持っています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を使用しています