順序付き辞書 - OrderedDict の紹介
例
順序付き辞書は通常の辞書と似ていますが、通常の辞書は任意の順序で反復処理するのに対し、要素が挿入される順序を記録できる点が異なります。以下の例を参照してください:
import collections print 'Regular dictionary:' d = {} d['a'] = 'A' d['b'] = 'B' d['c'] = 'C' d['d'] = 'D' d['e'] = 'E' for k, v in d.items(): print k, v print '\nOrderedDict:' d = collections.OrderedDict() d['a'] = 'A' d['b'] = 'B' d['c'] = 'C' d['d'] = 'D' d['e'] = 'E' for k, v in d.items(): print k, v
実行結果は次のとおりです:
-> python test7.py Regular dictionary: a A c C b B e E d D OrderedDict: a A b B c C d D e E
通常、辞書は挿入順に走査されていないことがわかります。
等価性
2つの順序付けされたフィールドが等しい(==)かどうかを判断するには、要素の挿入順序が等しいかどうかを考慮する必要があります
import collections print 'dict :', d1 = {} d1['a'] = 'A' d1['b'] = 'B' d1['c'] = 'C' d1['d'] = 'D' d1['e'] = 'E' d2 = {} d2['e'] = 'E' d2['d'] = 'D' d2['c'] = 'C' d2['b'] = 'B' d2['a'] = 'A' print d1 == d2 print 'OrderedDict:', d1 = collections.OrderedDict() d1['a'] = 'A' d1['b'] = 'B' d1['c'] = 'C' d1['d'] = 'D' d1['e'] = 'E' d2 = collections.OrderedDict() d2['e'] = 'E' d2['d'] = 'D' d2['c'] = 'C' d2['b'] = 'B' d2['a'] = 'A' print d1 == d2
実行結果は次のとおりです:
-> python test7.py dict : True OrderedDict: False
そして、順序付けされた辞書かどうかを判断するとき他の通常の辞書と同等ですが、内容が同等であるかどうかを判断するだけで済みます。
注
OrderedDict のコンストラクターまたは update() メソッドはキーワード パラメーターを受け入れますが、Python 関数呼び出しでは順序なし辞書を使用してパラメーターを渡すため、キーワード パラメーターの順序が失われるため、作成された順序付き辞書はその順序を保証しません。