<MyRusakov.ru />

Профессия Web-разработчик

Профессия Web-разработчик

Этот комплект за 8 месяцев превратит Вас в Web-разработчика с нуля. Учиться достаточно 1 час в день.

Начнёте Вы с HTML, CSS и вёрстки сайтов. Потом перейдёте к программированию и JavaScript. Затем изучите PHP, MySQL, SQL, Python. Изучите Web-фреймворки Laravel и Django. Создадите 5 своих сайтов для портфолио.

Комплект содержит:

- 540 видеоуроков

- 110 часов видео

- 1205 заданий для закрепления материала из уроков

- 5 финальных тестов

- 7 сертификатов

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Словари в Python (dict): понятное руководство с примерами

Словари в Python (dict): понятное руководство с примерами

Если вы ищете «Словари в Python: понятное руководство с примерами», вы по адресу. Dict — ассоциативный массив, где каждому ключу соответствует значение. Это незаменимый тип данных для конфигураций, кэшей, подсчётов и быстрых поисков.

Что такое словарь dict и чем он полезен

Словарь — это коллекция пар ключ–значение с быстрым доступом по ключу (амортизированно O(1)). Ключи должны быть хешируемыми (обычно неизменяемые типы: str, int, float, tuple из хешируемых объектов). С 3.7+ словари сохраняют порядок вставки ключей, что удобно для предсказуемого вывода и сериализации.

Создание словарей

# Литеральный синтаксис
user = {"name": "Alex", "age": 28}

# Через dict()
user2 = dict(name="Sam", age=21)

# Из списка пар
pairs = [("a", 1), ("b", 2)]
mapping = dict(pairs)

# fromkeys: создаёт ключи с одним значением
empty_scores = dict.fromkeys(["math", "cs"], 0)  # {"math": 0, "cs": 0}

# Словарь c составным ключом (кортеж)
grid = { (0, 0): "empty", (1, 2): "wall" }

# Небольшой пример генератора словаря (dict comprehension)
squares = {n: n*n for n in range(5)}  # {0:0, 1:1, 2:4, 3:9, 4:16}

Чтение, запись и безопасный доступ

Доступ по ключу через квадратные скобки выдаёт ошибку KeyError, если ключа нет. Метод get возвращает None или значение по умолчанию — это безопаснее.

profile = {"name": "Alex", "city": "Minsk"}

# Чтение
name = profile["name"]           # "Alex"
city = profile.get("city")        # "Minsk"
lang = profile.get("lang", "ru")  # "ru" (нет ключа, вернули дефолт)

# Запись и обновление
profile["age"] = 28               # Добавили ключ
profile["city"] = "Vilnius"       # Обновили значение

setdefault: инициализация при отсутствии ключа

data = {}
# Если "tags" нет, создадим со значением [] и вернём его
lst = data.setdefault("tags", [])
lst.append("python")
# data == {"tags": ["python"]}

Совет: setdefault удобен для группировок, но при частых вызовах может быть медленнее явной проверки. Для серьёзных нагрузок рассмотрите collections.defaultdict.

Объединение словарей: update и оператор |

base = {"host": "localhost", "port": 8000}
override = {"port": 8080, "debug": True}

# Мутирующее объединение
base.update(override)
# base == {"host": "localhost", "port": 8080, "debug": True}

# Нематирующее объединение (Python 3.9+)
cfg1 = {"a": 1} | {"b": 2}           # {"a":1, "b":2}
cfg2 = {"a": 1} | {"a": 3, "c": 4} # {"a":3, "c":4}

# Объединение с приоритетом левого словаря
left_priority = {"a": 1, "b": 2} | {"b": 100}
# {"a": 1, "b": 100}

Перебор словаря: keys, values, items

stats = {"ok": 10, "warn": 3, "error": 1}

# По умолчанию перебираются ключи
for key in stats:
    print(key)

# Явно по ключам/значениям
for key in stats.keys():
    print(key)

for value in stats.values():
    print(value)

for key, value in stats.items():
    print(key, value)

# Проверка наличия ключа
if "error" in stats:
    print("Есть ошибки")

Коллекции keys, values и items — «представления» (views), они лёгкие и отражают изменения словаря на лету. Для материализации используйте list(stats.keys()).

Удаление и очистка

d = {"a": 1, "b": 2, "c": 3}

val = d.pop("b")       # Удаляет и возвращает значение (2)
# d == {"a": 1, "c": 3}

item = d.popitem()      # Удаляет и возвращает последнюю пару ("c", 3)

del d["a"]             # Удаляет ключ "a"

d.clear()               # Полная очистка

Практика: подсчёт и группировка данных

Подсчёт частоты слов

text = "python is great and python is fast"
freq = {}
for word in text.split():
    freq[word] = freq.get(word, 0) + 1
print(freq)  # {'python': 2, 'is': 2, 'great': 1, 'and': 1, 'fast': 1}

Совет: для подсчёта часто удобно использовать collections.Counter, но базовый dict тоже справляется отлично и прозрачно.

Группировка по первой букве

words = ["map", "max", "min", "sum", "sorted"]
groups = {}
for w in words:
    key = w[0]
    groups.setdefault(key, []).append(w)
print(groups)  # {'m': ['map', 'max', 'min'], 's': ['sum', 'sorted']}

Порядок, копирование и вложенность

  • Порядок ключей сохраняется с Python 3.7+, перебор идёт в порядке вставки.
  • Поверхностная копия: d.copy() или dict(d). Глубокая копия для вложенных структур: copy.deepcopy(d).
  • Неизменяемость ключей: ключи должны быть хешируемыми. Списки и dict нельзя использовать как ключи, кортежи — можно, если внутри только хешируемые элементы.
import copy
nested = {"user": {"name": "Alex", "tags": ["py", "dev"]}}
shallow = nested.copy()
deep = copy.deepcopy(nested)

shallow["user"]["name"] = "Sam"
print(nested["user"]["name"])  # "Sam" — поверхностная копия делит вложенную ссылку

deep["user"]["name"] = "Kate"
print(nested["user"]["name"])  # "Sam" — глубокая копия изолирована

Сериализация в JSON

Словари напрямую сериализуются в JSON: ключи должны быть строками (или будут приведены к строкам).

import json
user = {"name": "Alex", "age": 28, "tags": ["python", "web"]}
payload = json.dumps(user, ensure_ascii=False)
print(payload)  # {"name": "Alex", "age": 28, "tags": ["python", "web"]}

Частые ошибки и лучшие практики

  • KeyError: используйте get, in или setdefault, если ключ может отсутствовать.
  • Не мутируйте словарь во время прямого перебора по нему — сначала соберите список ключей: for k in list(d): ...
  • Для объединения предпочитайте | в новых версиях Python — это читаемо и немутирующе.
  • Продумывайте тип ключей заранее: строки для конфигов, кортежи для координат/составных ключей.
  • Храните только необходимое: большие вложенные структуры усложняют копирование и сериализацию.

Мини-чеклист перед собеседованием

  • Отличаете [] и get, понимаете KeyError.
  • Знаете update, pop, popitem, clear, setdefault, | и |=.
  • Умеете перебирать keys, values, items и проверять принадлежность ключа.
  • Помните, что порядок ключей сохраняется (3.7+).
  • Понимаете разницу между поверхностной и глубокой копией.

Куда двигаться дальше

Освоив дикты, вам будет проще работать с конфигами, API и данными. Хотите системно прокачать Python с практикой и проектами? Рекомендую пошаговый курс «Python с Нуля до Гуру» с упражнениями и проверкой знаний — отличный способ быстро перейти от основ к уверенной разработке.

Теперь вы знаете «Словари в Python: понятное руководство с примерами». Попробуйте переписать пару своих задач под dict — и вы сразу почувствуете прирост скорости и читаемости кода.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.