PythonのOrderedDict

PythonのOrderedDictは、アイテムの挿入順序を維持する辞書のサブクラスです。OrderedDictをイテレートすると、アイテムは挿入された順序で返されます。通常の辞書は挿入順序を追跡しません。したがって、イテレートするとアイテムは任意の順序で返されます。アイテムが挿入された順序で返されることを確実にするために、OrderedDictを使用することができます。

PythonのOrderedDict

  • OrderedDict is part of python collections module.
  • We can create an empty OrderedDict and add items to it. If we create an OrderedDict by passing a dict argument, then the ordering may be lost because dict doesn’t maintain the insertion order.
  • If an item is overwritten in the OrderedDict, it’s position is maintained.
  • If an item is deleted and added again, then it moves to the last.
  • OrderedDict popitem removes the items in FIFO order. It accepts a boolean argument last, if it’s set to True then items are returned in LIFO order.
  • We can move an item to the beginning or end of the OrderedDict using move_to_end function. It accepts a boolean argument last, if it’s set to False then item is moved to the start of the ordered dict.
  • From python 3.6 onwards, order is retained for keyword arguments passed to the OrderedDict constructor, refer PEP-468.
  • We can use reversed() function with OrderedDict to iterate elements in the reverse order.
  • Equality tests between OrderedDict objects are order-sensitive and are implemented as list(od1.items())==list(od2.items()).
  • Equality tests between OrderedDict and other Mapping objects are order-insensitive like regular dictionaries. This allows OrderedDict objects to be substituted anywhere a regular dictionary is used.

PythonのOrderedDictの使用例

PythonのOrderedDictのコード例を見てみましょう。

OrderedDict オブジェクトを作成する

from collections import OrderedDict

# creating a simple dict
my_dict = {'kiwi': 4, 'apple': 5, 'cat': 3}

# creating empty ordered dict
ordered_dict = OrderedDict()
print(ordered_dict)

# creating ordered dict from dict
ordered_dict = OrderedDict(my_dict)
print(ordered_dict)

出力:

OrderedDict()
OrderedDict([('kiwi', 4), ('apple', 5), ('cat', 3)])

OrderedDictからアイテムを追加、置換、削除する。

# adding elements to dict
ordered_dict['dog'] = 3

# replacing a dict key value
ordered_dict['kiwi'] = 10
print(ordered_dict)

# removing and adding a value
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メソッドを示しています。

# moving apple to end and dog to start
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メソッドの例

# pop last item
item = ordered_dict.popitem(True)
print(item)
print(ordered_dict)

結果:

('apple', 5)
OrderedDict([('dog', 3), ('cat', 3), ('kiwi', 4)])

順序付けられた辞書の逆順の繰り返し

# reversed iteration
for item in reversed(ordered_dict):
    print(item)

出力:

kiwi
cat
dog

順序付けされた辞書の等価テストの例

# equality tests
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ドキュメント

コメントを残す 0

Your email address will not be published. Required fields are marked *