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

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

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

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

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

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

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

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


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

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

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

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

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

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

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

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

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

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

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

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

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

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

Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
18 мая 10 месяцев

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

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

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

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»