#!/usr/bin/env python # coding: utf-8 # **Collections** — это встроенный модуль Python, реализующий специализированный контейнер типов данных. Является альтернативой встроенным контейнерам общего назначения Python, таким как dict, list, set и tuple. # Доступ к данным, хранящимся в обычном кортеже, можно получить с помощью индексов. Пример: # In[1]: plain_tuple = (10, 11, 12, 13) # In[2]: plain_tuple[0] # In[3]: plain_tuple[3] # Не обязательно давать названия отдельным элементам, хранящимся в кортеже. В этом есть необходимость лишь в том случае, если кортеж обладает множеством полей. # # Именно здесь функциональность [namedtuple](https://docs.python.org/3.8/library/collections.html#collections.namedtuple) проявляет свои силы. Это функция для кортежей с именованными полями (Named Fields), которую можно рассматривать как расширение встроенного типа данных [tuple](https://docs.python.org/3.8/library/stdtypes.html#tuple). Именованные кортежи задают значение для каждой позиции в кортеже, делая код более читаемым и самодокументируемым. Доступ к объектам, хранящимся в кортеже, можно получить с помощью уникального (удобного для чтения) идентификатора. Это избавляет от необходимости запоминать целочисленные индексы. Рассмотрим его реализацию. # In[5]: from collections import namedtuple fruit = namedtuple('fruit', 'number variety color') guava = fruit(number=2, variety='HoneyCrisp', color='green') apple = fruit(number=5, variety='Granny Smith', color='red') # Построение namedtuple начинается с передачи названия объекта type (fruit). Затем передается строка с пробелами между названиям каждого поля. Теперь можно обращаться к различным параметрам: # In[7]: fruit # In[10]: guava.number # In[11]: guava.variety # In[12]: apple.color # **Словари** — это эффективный способ хранения данных для дальнейшего извлечения, в котором данные представлены в виде неупорядоченного множества пар key:value. Ключи — это уникальные и неизменяемые объекты. # In[13]: fruits = {'apple':300, 'guava': 200} fruits['guava'] # Все очень просто, когда значения представлены целыми числами или строками. Однако если они представлены в форме списков и словарей, значение (пустой список или словарь) нужно инициализировать при первом использовании ключа. # [defaultdict](https://docs.python.org/3.8/library/collections.html#collections.defaultdict) автоматизирует и упрощает этот процесс. Для лучшего понимания рассмотрим пример ниже: # In[21]: d = {} d[1] # Словарь Python выдает ошибку, поскольку ‘A’ на данный момент не находится в словаре. Рассмотрим тот же самый пример с использованием defaultdict. # In[22]: from collections import defaultdict d = defaultdict(int) d[1] # In[23]: d # In[24]: d['1'] = 5 # In[25]: d # In[26]: d[4] # In[27]: d # In[28]: d['A'] # In[29]: d # defaultdict создает элементы, для которых нужно получить доступ (если они еще не существуют). defaultdict также является объектом-словарем и содержит те же методы, что и словарь. Разница заключается в том, что он устанавливает первый аргумент (default_factory) в качестве типа данных по умолчанию для словаря. # In[ ]: