PythonのOrderedDictは、項目の挿入順序を維持するdictのサブクラスです。OrderedDictを繰り返し処理すると、項目は挿入された順序で返されます。通常の辞書は挿入順序を追跡しません。そのため、それを繰り返し処理すると、項目は任意の順序で返されます。項目が挿入された順序で返されることを確実にするためには、OrderedDictを使用できます。
PythonのOrderedDict
- OrderedDictはpython collectionsモジュールの一部です。
- 空の
OrderedDict
を作成し、そこに項目を追加することができます。dict引数を渡してOrderedDictを作成すると、順序が失われる可能性があるため、注意が必要です。 - OrderedDict内の項目が上書きされた場合でも、その位置は維持されます。
- 項目が削除されて再度追加される場合、それは最後に移動します。
- OrderedDictの
popitem
は、FIFOの順序で項目を削除します。boolean引数last
がTrue
に設定されている場合、項目はLIFOの順序で返されます。 - OrderedDictの
move_to_end
関数を使用して、項目をOrderedDictの先頭または末尾に移動できます。ブール引数last
がFalse
に設定されている場合、項目は順序付き辞書の先頭に移動されます。 - Python 3.6以降、OrderedDictコンストラクターに渡されたキーワード引数の順序は保持されます、PEP-468を参照してください。
- OrderedDictで
reversed()
関数を使用して、要素を逆順に反復処理できます。 - OrderedDictオブジェクト間の等価性テストは順序に敏感であり、
list(od1.items())==list(od2.items())
として実装されます。 - OrderedDictと他のMappingオブジェクト間の等価性テストは、通常の辞書のように順序に敏感ではありません。これにより、通常の辞書が使用されるどこでもOrderedDictオブジェクトを代用できます。
Python OrderedDictの例
Python OrderedDictのコード例を見てみましょう。
OrderedDictオブジェクトの作成
from collections import OrderedDict
# シンプルなdictの作成
my_dict = {'kiwi': 4, 'apple': 5, 'cat': 3}
# 空の順序付きdictの作成
ordered_dict = OrderedDict()
print(ordered_dict)
# dictから順序付きdictの作成
ordered_dict = OrderedDict(my_dict)
print(ordered_dict)
出力:
OrderedDict()
OrderedDict([('kiwi', 4), ('apple', 5), ('cat', 3)])
OrderedDictへのアイテムの追加、置換、削除
# 辞書への要素の追加
ordered_dict['dog'] = 3
# 辞書のキーの値を置換
ordered_dict['kiwi'] = 10
print(ordered_dict)
# 値の削除と追加
ordered_dict.pop('kiwi')
print(ordered_dict)
ordered_dict['kiwi'] = 4
print(ordered_dict)
出力:
OrderedDict([('kiwi', 10), ('apple', 5), ('cat', 3), ('dog', 3)])
OrderedDict([('apple', 5), ('cat', 3), ('dog', 3)])
OrderedDict([('apple', 5), ('cat', 3), ('dog', 3), ('kiwi', 4)])
OrderedDict move_to_endの例
# appleを最後に、dogを最初に移動
ordered_dict.move_to_end('apple')
ordered_dict.move_to_end('dog', False)
print(ordered_dict)
出力:
OrderedDict([('dog', 3), ('cat', 3), ('kiwi', 4), ('apple', 5)])
OrderedDict popitemの例
# 最後のアイテムを取り出す
item = ordered_dict.popitem(True)
print(item)
print(ordered_dict)
出力:
('apple', 5)
OrderedDict([('dog', 3), ('cat', 3), ('kiwi', 4)])
OrderedDictの逆イテレーション
# 逆イテレーション
for item in reversed(ordered_dict):
print(item)
出力:
kiwi
cat
dog
OrderedDictの等価性テストの例
# 等価性テスト
d1 = {'a': 'A', 'b': 'B'}
d2 = {'b': 'B', 'a': 'A'}
od1 = OrderedDict({'a': 'A', 'b': 'B'})
od2 = OrderedDict({'b': 'B', 'a': 'A'})
print(d1 == d2)
print(od1 == od2)
print(d1 == od1)
出力:
True
False
True
完全な例コードは、GitHubリポジトリからダウンロードできます。
参照:Pythonドキュメント
Source:
https://www.digitalocean.com/community/tutorials/python-ordereddict