<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)])
なるほど。
参考先