読者です 読者をやめる 読者になる 読者になる

<Python> OrderedDict

辞書型 dict で順番を維持したい時は、OrderDictらしい。

8.3. collections — コンテナデータ型 — Python 3.5.1 ドキュメント

ちとやってみた。

In [28]: from collections import OrderedDict

まずは、ふつーのdict

In [29]: d = {'one': 1, 'two': 2, 'three': 3}

In [30]: d
Out[30]: {'one': 1, 'three': 3, 'two': 2}

順番ぐちゃぐちゃ。
で、OrderDict

In [31]: d = OrderedDict(('one',1), ('two',2), ('three',3))
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-31-71e31035231a> in <module>()
----> 1 d = OrderedDict(('one',1), ('two',2), ('three',3))

TypeError: expected at most 1 arguments, got 3

ゲロ、、
タプルで渡さないといけないが、()が足りなかった、
再トライ。

In [32]: d = OrderedDict((('one',1), ('two',2), ('three',3)))

In [33]: d
Out[33]: OrderedDict([('one', 1), ('two', 2), ('three', 3)])

なるほどね。
一応 dir()してみる。

In [34]: type(d)
Out[34]: collections.OrderedDict

In [35]: dir(d)
Out[35]: 
['__class__',
 '__contains__',
 '__delattr__',
 '__delitem__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__gt__',
 '__hash__',
 '__init__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__reversed__',
 '__setattr__',
 '__setitem__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'clear',
 'copy',
 'fromkeys',
 'get',
 'items',
 'keys',
 'move_to_end',
 'pop',
 'popitem',
 'setdefault',
 'update',
 'values']

In [36]: d.items
Out[36]: <function OrderedDict.items>

In [37]: d.items()
Out[37]: odict_items([('one', 1), ('two', 2), ('three', 3)])

なるほど。

参考先

azunobu.hatenablog.com

shannon-lab.org