collections.OrderedDict
Упорядоченный словарь. Хранит порядок вставки в него элементов.
OrderedDict([items])
Внимание
Начиная с +py3.6 (и официально гарантировано с +py3.7) и обычные словари — dict() — сохраняют порядок вставки элементов.
Упорядоченные словари походи на обычные, но хранят порядок вставки в них элементов. При итерировании по упорядоченному словарю, его элементы выдаются в том порядке, в каком они были в него добавлены.
То есть, даже если значение по ключу обновляется, изначально заданное место ключа в словаре остаётся неизменным. Однако, если удалить ключ и вставить заново, то он очутится на последнем месте.
from collections import OrderedDict
mydict = OrderedDict()
mydict['z'] = 'первый'
mydict['a'] = 'последний'
mydict['z'] = 'первый всё ещё'
for key in mydict:
print(key) # z a
Проверка на равенство одного упорядоченного словаря другому учитывает порядок их элементов:
list(odict1.items())==list(odict2.items())
. В то же время при сравнении с другими представителями отображений порядок во внимание не принимается: это позволяет использовать OrderedDict
в тех местах, где используются обычные словари.На заметку
По сравнению с обычными словарями для
OrderedDict
вопросы об эффективности использования памяти, скорости итерирования, быстродействия операций обновления были отодвинуты на второй план. На первом месте — операции, связанные с [пере]определением порядка. Поэтому упорядоченные словари выигрывают в сценариях, с частым переупорядочиванием элементов, подобных LRU-кешу.В остальном, упорядоченный словарь ведёт себя аналогично обычному (наследует его свойства и методы), предлагая, однако же, дополнительные инструменты.
На заметку
Больше информации о словарях можно почерпнуть из видео Современные словари в Python: Сочетание дюжины отличных идей.
+py3.5 Добавлена поддержка reversed() для элементов (items), ключей (keys), значений (values).
+py3.6 После принятия PEP-468, порядок именованных аргументов при вызовах
OrderedDict(z=1, a=2)
и .update()
тоже учитывается.+py3.8 В соответствии с PEP-584 добавлена поддержка операторов слияния (
|
) и обновления (|=
).
Синонимы поиска: collections.OrderedDict, collections, OrderedDict
В разделе «collections»:
collections.Counter
На заметку
У нас есть представительство в Facebook. Ссылка в самом низу страницы.