OrderedDict

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
    

通常の dict は追加した順番を記録せず、繰り返し処理を行うと任意の順番でその値を生成します。それと比較して OrderedDict は追加された要素の順番を覚えていて、イテレータを作成するときに使用されます。

$ python collections_ordereddict_iter.py
Regular dictionary:
a A
c C
b B
e E
d D

OrderedDict:
a A
b B
c C
d D
e E

等価判定

通常の dict は等価であるかを検査するときにそのコンテンツを調べます。 OrderedDict は追加された要素の順番も考慮します。

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

このケースでは、2つの順序付きディクショナリは違う順番の値から作成されるので、その2つは違うものと見なされます。

$ python collections_ordereddict_equality.py
dict       : True
OrderedDict: False
Bookmark and Share