Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Синтаксис Python: Cловари и множества

Как и другие встроенные коллекции, словари поддерживаются языком и имеют собственный синтаксис для описания литералов. В этом уроке мы изучим этот синтаксис подробнее.

Литерал словаря записывается в фигурных скобках. Пары «ключ-значение» разделяются запятыми, а ключ отделяется от значения двоеточием:

dictionary = {
    "foo": "bar",
    "baz": 42,
    "items": {
        1: "apple",
        2: "orange",
        100500: "lemon"
    },
    True: "python"
}
dictionary  # {'foo': 'bar', 'baz': 42, 'items': {1: 'apple', 2: 'orange', 100500: 'lemon'}, True: 'python'}

В этом примере есть и ключи-строки, и ключи-числа, и вложенные словари. И конечно же, здесь есть переменные, которые могут выступать в роли значений и ключей:

key, val = 'x', 42
{key: val}  # {'x': 42}

Доступ к элементам по ключу

Выше мы объявили словарь dictionary. Запросить у него значение по ключу можно так:

dictionary["baz"]  # 42
dictionary["BANG"]  # KeyError: 'BANG'

Ключа "BANG" в dictionary нет, поэтому выбросилось исключение KeyError — аналог IndexError для списков.

Проверить наличие ключа в словаре можно с помощью привычного оператора in:

"baz" in dictionary  # True
"BANG" in dictionary  # False

Если вы захотите получить значение по ключу, которого может и не быть, можно сделать это так:

dictionary["BANG"] if "BANG" in dictionary else None

Подобный безопасный запрос элементов нужен довольно часто. Поэтому объект словаря имеет для этого специальный метод .get:

dictionary.get("baz")  # 42
dictionary.get("BANG")  # Вернет None
dictionary.get("BANG", "no such key")  # 'no such key'

Третий вызов метода показывает, как можно явно задать значение по умолчанию. Если его не указывать, метод вернет None при отсутствии значения по указанному ключу.

Итераторы keys, values и items

Если попробовать проитерировать словарь, то мы получим перечень ключей:

for k in {"a": 1, "b": 2}:
    print(k)

# => a
# => b

Этого же результата можно добиться и более явно. Для этого нужно вызвать метод .keys():

list({"a": 1, "b": 2}.keys())  # ['a', 'b']

Чтобы получить значения, нужно вызвать метод .values():

list({"a": 1, "b": 2}.values())  # [1, 2]

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

for k, v in {"a": 1, "b": 2}.items():
    print(k, "=", v)

# => a = 1
# => b = 2

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


Дополнительные материалы

  1. Словари

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
от 25 000 ₸ в месяц
Разработка веб-приложений на Django
10 месяцев
с нуля
Старт 7 ноября
профессия
от 24 542 ₸ в месяц
новый
Сбор, анализ и интерпретация данных
9 месяцев
с нуля
Старт 7 ноября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»