Поиск по сайту:

Python OrderedDict


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

Python OrderedDict

  • OrderedDict является частью модуля коллекций 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 и другими объектами Mapping не зависят от порядка, как и обычные словари. Это позволяет заменять объекты OrderedDict везде, где используется обычный словарь.

Примеры 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

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

Выход:

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

Обратная итерация OrderedDict

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

Выход:

kiwi
cat
dog

Пример проверки равенства OrderedDict

# 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