Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Стандартные коллекции Python в контексте Data Engineering
Пython предоставляет мощный набор встроенных и стандартных коллекций, которые я активно использую в повседневной работе data engineer.
Встроенные последовательности
list — самая универсальная коллекция:
- Упорядоченная, изменяемая
- Быстрый доступ по индексу O(1)
- Используется везде: от обработки данных до построения pipelines
- В контексте дата-обработки — хранение батчей строк перед отправкой в БД
tuple — неизменяемая альтернатива:
- Можно использовать как ключи в словарях
- Быстрее list при большом числе операций
- Идеальна для возврата нескольких значений из функции
- Hashable — используется в compound keys
# Compound key для де-дупликации
processed_users = set()
for row in data:
key = (row['user_id'], row['date'])
if key not in processed_users:
process(row)
processed_users.add(key)
Множества (set, frozenset)
set — неупорядоченная коллекция уникальных элементов:
- Операции: union, intersection, difference — O(1) в среднем
- Идеальна для де-дупликации:
set(data)вместо Loop - Проверка принадлежности очень быстрая
- При работе с идентификаторами (user_ids, session_ids)
frozenset — immutable версия:
- Можно использовать в качестве ключа dict
- Для кэширования результатов
# Быстрое пересечение двух наборов ID
active_users = set(df['user_id'])
blocked_users = {'user_123', 'user_456'}
valid_users = active_users - blocked_users
Словари (dict, defaultdict, Counter, OrderedDict)
dict — основная структура для key-value данных:
- O(1) поиск по ключу
- Сохранение порядка (Python 3.7+)
- Используется в парсинге JSON, конфигах
defaultdict — автоматическое инициализирование значений:
from collections import defaultdict
# Группировка с автоматическим созданием списков
user_purchases = defaultdict(list)
for row in sales_data:
user_purchases[row['user_id']].append(row['amount'])
Counter — подсчёт частоты элементов:
from collections import Counter
# Топ-10 самых частых значений
top_products = Counter(orders['product_id']).most_common(10)
OrderedDict — сейчас менее актуален (dict сохраняет порядок):
- Раньше использовался для упорядоченных словарей
- Сейчас используется редко, только для специальных case'ов
Очереди и стеки (deque, heapq)
deque (двусторонняя очередь) — для sliding window алгоритмов:
from collections import deque
# Moving average для streaming данных
window = deque(maxlen=30) # Последние 30 значений
for value in stream:
window.append(value)
avg = sum(window) / len(window)
heapq — приоритетная очередь:
import heapq
# Топ-3 максимума без сортировки всего массива
top_3 = heapq.nlargest(3, data, key=lambda x: x['score'])
namedtuple — структурированные данные
namedtuple — лёгкая альтернатива dataclass для простых структур:
from collections import namedtuple
Event = namedtuple('Event', ['user_id', 'timestamp', 'event_type'])
event = Event(123, '2025-01-01', 'purchase')
print(event.user_id) # Читаемость
Практическое применение
- list/tuple: основная работа с данными
- dict/defaultdict: группировка, mapping
- set: де-дупликация, быстрый поиск
- Counter: анализ частотности
- deque: алгоритмы с окном
- heapq: топ-K элементов без полной сортировки
Выбор коллекции напрямую влияет на performance pipeline'а: неправильная коллекция может замедлить обработку гигабайт данных в 10 раз.