collections
содержащий дополнительные структуры данных. Мы поговорим о некоторых и обсудим их пользу.defaultdict
OrderedDict
counter
deque
namedtuple
enum.Enum
(вне модуля; Python 3.4+)defaultdict
defaultdict
время от времени. В отличие от dict
нам не нужно проверять существует ли ключ в словаре или нет. В результате мы можем писать следующий код:defaultdict
является добавление элементов в список внутри словаря. Если ключ не существует в словаре, то вы упрётесь в KeyError
. defaultdict
позволяет обойти эту проблему аккуратным образом. Для начала, позвольте привести пример использования dict
с исключением KeyError
, а затем мы посмотрим на пример с defaultdict
.some_dict
используя json.dumps
. Вот пример:OrderedDict
OrderedDict
сохраняет элементы в порядке добавление в словарь. Изменение значения ключа не изменяет его позиции. При этом удаление и повторное добавление перенесет ключ в конец словаря.counter
Counter
позволяет подсчитывать частоту определенных элементов. К примеру, мы можем использовать его, чтобы посчитать сколько любимых цветов у каждого человека:deque
deque
предлагает нам двустороннюю очередь, которая позволяет добавлять и удалять элементы с обеих сторон. Для начала, вам нужно импортировать модуль deque
из библиотеки collections
:namedtuple
namedtuples
? Этот модуль открывает доступ к удобной структуре данных для простых задач. С помощью именованных кортежей вам не обязательно использовать индексы для обращения к элементам кортежа. Вы можете думать об именованных кортежах как о словарях, но в отличие от словарей они неизменяемы..
(точки). Давайте чуть подробнее на этом остановимся. Именованный кортеж имеет два обязательных аргумента. Это имя самого кортежа и имена полей кортежа. В примере выше имя нашего кортежа Animal
, имена полей соответственно: name
, age
и type
. Именованный кортеж позволяет создавать само-документированные кортежи. Вы сможете легко понять код при первом же взгляде на него. И, поскольку вы не привязаны к индексам, у вас открывается больше возможностей по поддержке своего кода. Помимо этого, именованные кортежи не создают словари для каждого экземпляра, они легковесны и не требуют больше памяти чем обычные кортежи. Это делает их быстрее словарей. Тем не менее, помните, что как и в случае с обычными кортежами, именованный кортеж неизменяем. Это означает, что такой код работать не будет:enum.Enum
(Python 3.4+)enum
. Он доступен в модуле enum
, начиная с Python 3.4 (также в PyPI как бекпорт под именем enum34
). Enums (перечисляемый тип) это простой способ организации разных вещей.Animal
из прошлого примера. У него есть поле type
. Проблема в том, что его тип - строка. Это создаёт нам несколько проблем. Что если пользователь ввёл Cat
, поскольку нажал Shift? Или CAT
? Или kitten
?cat
:collections
. Обязательно ознакомьтесь с официальной документацией после чтения этой главы.