Python OrderedDict

Python OrderedDict – это подкласс dict, который сохраняет порядок вставки элементов. При итерации по OrderedDict элементы возвращаются в том порядке, в котором они были вставлены. Обычный словарь не отслеживает порядок вставки. Поэтому при итерации по нему элементы возвращаются в произвольном порядке. Если мы хотим убедиться, что элементы возвращаются в порядке их вставки, мы можем использовать OrderedDict.

Python OrderedDict

  • OrderedDict является частью модуля collections Python.
  • Мы можем создать пустой OrderedDict и добавить в него элементы. Если мы создаем OrderedDict, передавая аргумент dict, то порядок может быть потерян, потому что dict не сохраняет порядок вставки.
  • Если элемент перезаписывается в OrderedDict, его позиция сохраняется.
  • Если элемент удаляется и снова добавляется, то он перемещается в конец.
  • OrderedDict popitem удаляет элементы в порядке FIFO. Он принимает аргумент-булево значение last, если установлено в True, то элементы возвращаются в порядке LIFO.
  • Мы можем переместить элемент в начало или конец OrderedDict, используя функцию move_to_end. Она принимает логический аргумент last; если он установлен в False, то элемент перемещается в начало упорядоченного словаря.
  • Начиная с Python 3.6, порядок сохраняется для именованных аргументов, переданных в конструктор OrderedDict; см. PEP-468.
  • Мы можем использовать функцию reversed() с OrderedDict для итерации элементов в обратном порядке.
  • Тесты равенства между объектами OrderedDict чувствительны к порядку и реализованы как list(od1.items())==list(od2.items()).
  • Тесты равенства между OrderedDict и другими объектами отображения не чувствительны к порядку, как обычные словари. Это позволяет использовать объекты OrderedDict везде, где используется обычный словарь.

Примеры использования OrderedDict в Python

Давайте рассмотрим несколько примеров кода с использованием OrderedDict в Python.

Создание объекта OrderedDict

from collections import OrderedDict

# создание простого словаря
my_dict = {'kiwi': 4, 'apple': 5, 'cat': 3}

# создание пустого упорядоченного словаря
ordered_dict = OrderedDict()
print(ordered_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)

Output:

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)])

Пример move_to_end для OrderedDict

# перемещение "apple" в конец и "dog" в начало
ordered_dict.move_to_end('apple')
ordered_dict.move_to_end('dog', False)
print(ordered_dict)

Output:

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

Пример popitem для OrderedDict

# извлечение последнего элемента
item = ordered_dict.popitem(True)
print(item)
print(ordered_dict)

Output:

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

Обратное итерирование по OrderedDict

# обратное итерирование
for item in reversed(ordered_dict):
    print(item)

Output:

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