Как использовать ordereddict в Python?
OrderedDict
vs dict
в Python: правильный инструмент для работы
Время от времени вам может понадобиться словарь в Python, который запоминает порядок своих элементов. В прошлом у вас был только один инструмент для решения этой конкретной задачи: OrderedDict
в Python. Это специальный класс-наследник словаря, специально разработанный для запоминания порядка элементов, который определяется порядком вставки ключей.
В Python 3.6 это изменилось. Встроенный класс dict
теперь также сохраняет порядок своих элементов. Из-за этого многие в сообществе Python задаются вопросом, все еще ли полезен OrderedDict
. Более детальное рассмотрение OrderedDict
позволит обнаружить, что этот класс по-прежнему обладает ценными функциями.
В этом учебнике вы узнаете, как:
- Создавать и использовать объекты
OrderedDict
в своем коде - Определить отличия между
OrderedDict
иdict
- Понять достоинства и недостатки использования
OrderedDict
по сравнению сdict
Получив эти знания, вы сможете выбрать класс словаря, который лучше всего подходит для ваших потребностей, когда вы хотите сохранить порядок элементов.
По окончании учебника вы увидите пример реализации словаря-очереди на основе OrderedDict
, что было бы более сложно, если бы вы использовали обычный объект dict
.
Бесплатный бонус: Нажмите здесь, чтобы получить шпаргалку по Python и изучить основы Python 3, такие как работа с типами данных, словарями, списками и функциями Python.
Выбор между OrderedDict
и dict
В 2008 году была предложена PEP 372, которая вводит идею о добавлении нового класса словаря в collections
. Его основная цель заключалась в запоминании порядка элементов, определяемого порядком вставки ключей. Именно так появился OrderedDict
.
Разработчики Python хотели заполнить пробел и предоставить словарь, который мог бы сохранить порядок вставки ключей. Это, в свою очередь, позволило более простую реализацию упорядоченных словарей.
Если вы хотите создать OrderedDict
, то вам следует использовать следующий синтаксис:
При этом порядок, в котором указываются элементы, будет сохраняться в OrderedDict.
Однако, если вы хотите создать обычный словарь (dict) и убедиться, что элементы будут сохраняться по порядку, вам следует использовать версию Python 3.7 и выше, где встроенному классу dict добавили поддержку сохранения порядка элементов:
Этот код также будет сохранять порядок элементов при использовании последних версий Python.
OrderedDict
в Python: начало работы
Теперь, когда вы знаете различия между OrderedDict
и dict
, давайте начнем работу с OrderedDict
. В этом разделе вы узнаете, как создавать объекты OrderedDict
, управлять элементами в OrderedDict
и выполнять операции итерации по OrderedDict
в различных порядках.
Создание объектов OrderedDict
Создание OrderedDict
- это простой процесс. Вам просто нужно импортировать класс OrderedDict
из модуля collections
и создать экземпляр класса:
Вы можете создать пустой OrderedDict
или же передать его начальным элементам:
Порядок элементов будет таким же, как в порядке, указанном при создании OrderedDict
.
Управление элементами в OrderedDict
OrderedDict
предоставляет несколько методов для управления элементами. Вот некоторые из них:
Добавление элементов
Определение итеративного порядка
Удаление элементов
Объединение и обновление словарей с помощью операторов
Итерация по элементам OrderedDict
Итерация в обратном порядке с помощью reversed()
OrderedDict
также предоставляет возможность итерации по элементам в обратном порядке с помощью функции reversed()
. Вот пример:
Исследование уникальных возможностей OrderedDict
в Python
OrderedDict
предлагает несколько уникальных возможностей, которые помогают вам манипулировать словарями, сохраняя при этом порядок элементов. Рассмотрим некоторые из них:
Изменение порядка элементов с помощью .move_to_end()
Метод .move_to_end()
позволяет изменить порядок элементов в OrderedDict
, перемещая заданный ключ в начало или конец словаря. Вот пример:
В результате этого кода элемент с ключом “key1” будет перемещен в конец словаря:
Метод .move_to_end()
принимает опциональный аргумент last
, который указывает, должен ли элемент перемещаться в конец (если значение True
) или в начало (если значение False
). По умолчанию элемент перемещается в конец, если аргумент не указан.
Удаление элементов с помощью .popitem()
Метод .popitem()
позволяет удалить элемент из OrderedDict
. Он удаляет и возвращает последний элемент, добавленный в OrderedDict
(в соответствии с текущим порядком элементов). Вот пример:
По завершении этого кода последний элемент, добавленный в OrderedDict
, будет удален и возвращен, а сам OrderedDict
будет выглядеть так:
Тестирование равенства между словарями
OrderedDict
поддерживает операторы сравнения, такие как ==
и !=
, которые позволяют сравнивать равенство словарей. При сравнении равенство учитывает порядок элементов. Вот пример:
В этом примере d1
и d2
содержат одни и те же элементы, но в разном порядке. Это делает их не равными при сравнении.
Добавление новых атрибутов к экземпляру словаря
OrderedDict
позволяет добавлять новые атрибуты к экземпляру. Это может быть полезно, если вам нужно добавить дополнительную информацию к словарю. Вот пример:
В результате этого кода в OrderedDict
будет добавлен новый атрибут new_attribute
со значением "new_value"
:
Слияние и обновление словарей с помощью операторов
OrderedDict
также поддерживает операторы для объединения и обновления словарей. Это может быть полезным при работе с несколькими словарями и объединении их элементов. Вот примеры использования этих операторов:
В результате этого кода элементы обоих OrderedDict
будут объединены в один:
В результате этого кода элементы d2
будут добавлены в d1
:
Выбор правильного словаря для работы
Рассмотрев различия между OrderedDict
и dict
, а также узнав о возможностях OrderedDict
, вы можете принять обоснованное решение о выборе словаря, наиболее подходящего для ваших потребностей. Если вам важно сохранить порядок элементов, используйте OrderedDict
. Если же порядок не имеет значения, а вам нужна максимальная производительность, dict
может быть лучшим выбором.
Построение queue на основе словаря
С помощью OrderedDict
вы можете легко реализовать queue на основе словаря. Queue - это структура данных, которая работает по принципу “первый пришел - первый обслужен” (FIFO). Вот пример реализации queue на основе OrderedDict
:
Здесь очередь реализуется с использованием OrderedDict
. Метод enqueue()
добавляет элемент в очередь (в конец OrderedDict
), метод dequeue()
удаляет и возвращает элемент из очереди (из начала OrderedDict
), метод is_empty()
проверяет, пуста ли очередь, а метод size()
возвращает размер очереди.
Вся концепция queue основана на сохранении порядка элементов. Без OrderedDict
было бы сложнее реализовать queue в такой простой и эффективной форме.
Заключение
В этом учебнике вы узнали о различиях между OrderedDict
и dict
в Python и увидели примеры использования OrderedDict
для сохранения порядка элементов. Теперь вы можете принять обоснованное решение о том, какой словарь использовать в различных ситуациях.
OrderedDict
все еще является ценным инструментом, который предлагает уникальные возможности по сравнению с обычным словарем. Используйте его, когда вам важно сохранить порядок элементов в словаре и когда вы хотите получить преимущества, предоставляемые его дополнительными функциями.
Следующий раз, когда вы столкнетесь с задачей сохранения порядка элементов в словаре, подумайте о OrderedDict
и о том, как он может упростить вашу жизнь и сделать ваш код более читаемым и понятным.