順序保持ディクショナリ (2.7以降) | Python-izm

順序保持ディクショナリ (2.7 – 3.6)

Python 3.7から標準のディクショナリで追加した順序が保持されるようになりました。このページはPython 2.7からPython 3.6までを対象としています。

Python標準のディクショナリは追加した順番は保持してくれません。keyを指定して取り出す場合は問題ありませんが、追加した順序通りに取得したい場合はcollections.OrderedDictを使用します。
※Python 2.6 以前で追加した順番を保持するディクショナリを使用したい場合は、PyPIよりordereddict.OrderedDictから入手してください。

collections.OrderedDict

まずは標準のディクショナリの出力を見てみましょう。実行状況によって出力される順番が異なりますが、追加した通りの順番で取得されません。
※追加した順番の通りに取得される可能性もありますが、それは安定的ではなく再度実行したときに順序が変わる事もあります。

test_dict = {}

test_dict['word'] = 'doc'
test_dict['excel'] = 'xls'
test_dict['access'] = 'mdb'
test_dict['powerpoint'] = 'ppt'
test_dict['notepad'] = 'txt'
test_dict['python'] = 'py'

for key in test_dict:
    print(key)
word
python
notepad
excel
access
powerpoint

次に追加した順序が保持されるOrderedDictを試してみましょう。実行結果の通り追加した順番で出力されます。

import collections

test_dict = collections.OrderedDict()

test_dict['word'] = 'doc'
test_dict['excel'] = 'xls'
test_dict['access'] = 'mdb'
test_dict['powerpoint'] = 'ppt'
test_dict['notepad'] = 'txt'
test_dict['python'] = 'py'

for key in test_dict:
    print(key)
word
excel
access
powerpoint
notepad
python