Объяснение к уроку
После этого урока ты сможешь:
Выбор структуры данных — это архитектурное решение. Используй список (list), когда важны порядок и повторяющиеся значения; кортеж (tuple) для фиксированной записи; множество (set) для уникальности и проверки принадлежности; и словарь (dict) для поиска по ключу.
Само по себе множество не сохраняет порядок. Когда тебе нужно сохранить первое вхождение каждого элемента в исходном порядке, используй множество для отслеживания уже встреченных значений и список для сбора результатов. Это объединяет преимущества обеих структур.
Ты также можешь связывать коллекции: перебирать список записей, использовать словарь для поиска деталей по ключу и добавлять преобразованный результат в новый список. Для многоэтапного отчета раздели логику на нормализацию, валидацию, подсчет и отображение. Возвращай готовые данные при написании переиспользуемой функции.
Здесь не требуется нового сложного синтаксиса Python. Главная задача — выбрать правильное представление данных и скомбинировать подходы из этого раздела и Основ Python для программистов.
steps = ["build", "test", "build"]
release = ("v3", "eu")
tags = {"api", "worker", "api"}
ports = {"api": 8080, "worker": 9000}
print(len(steps))
print(release[0])
print(len(tags))
print(ports["worker"])Вывод:
3
v3
2
9000Каждая коллекция решает свою задачу: последовательность, фиксированная запись, уникальность или поиск по ключу.
raw = ["api", "worker", "api", "cache"]
seen = set()
unique = []
for name in raw:
if name not in seen:
seen.add(name)
unique.append(name)
print(unique)Вывод:
['api', 'worker', 'cache']Список сохраняет порядок; множество запоминает, какие имена уже были добавлены.
jobs = [{"name": "search"}, {"name": "backup"}]
owners = {"search": "Maya"}
labels = []
for job in jobs:
labels.append(f"{job['name']}: {owners.get(job['name'], 'unassigned')}")
print(labels)Вывод:
['search: Maya', 'backup: unassigned']Словарь предоставляет поиск по ключу для каждой записи.
results = [("api", "passed"), ("worker", "failed"), ("cache", "passed")]
counts = {"passed": 0, "failed": 0}
for service, state in results:
if state in counts:
counts[state] += 1
print(f"Passed: {counts['passed']}")
print(f"Failed: {counts['failed']}")Вывод:
Passed: 2
Failed: 1Словарь с фиксированными счетчиками делает отчет предсказуемым, даже если в категории ноль событий.
| Потребность | Структура или подход |
|---|---|
| Упорядоченные значения, включая повторы | list |
| Запись фиксированного размера | tuple |
| Отслеживание уникальности | set |
| Поиск данных по идентификатору | dict |
| Упорядоченные уникальные значения | Список + множество вместе |
| Необязательные связанные данные | mapping.get(key, default) |
if mapping.get(key) для проверки наличия теряет допустимые ложные значения.