Python OrderedDict

PythonのOrderedDictは、項目の挿入順序を維持するdictのサブクラスです。OrderedDictを繰り返し処理すると、項目は挿入された順序で返されます。通常の辞書は挿入順序を追跡しません。そのため、それを繰り返し処理すると、項目は任意の順序で返されます。項目が挿入された順序で返されることを確実にするためには、OrderedDictを使用できます。

PythonのOrderedDict

  • OrderedDictはpython collectionsモジュールの一部です。
  • 空のOrderedDictを作成し、そこに項目を追加することができます。dict引数を渡してOrderedDictを作成すると、順序が失われる可能性があるため、注意が必要です。
  • OrderedDict内の項目が上書きされた場合でも、その位置は維持されます。
  • 項目が削除されて再度追加される場合、それは最後に移動します。
  • OrderedDictのpopitemは、FIFOの順序で項目を削除します。boolean引数lastTrueに設定されている場合、項目はLIFOの順序で返されます。
  • OrderedDictのmove_to_end関数を使用して、項目をOrderedDictの先頭または末尾に移動できます。ブール引数lastFalseに設定されている場合、項目は順序付き辞書の先頭に移動されます。
  • 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