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