Как и другие встроенные коллекции, словари поддерживаются языком и имеют собственный синтаксис для описания литералов. В этом уроке мы изучим этот синтаксис подробнее.
Литерал словаря записывается в фигурных скобках. Пары «ключ-значение» разделяются запятыми, а ключ отделяется от значения двоеточием:
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
В работе с этими итераторами важно помнить, что словари не упорядочены. Поэтому не стоит строить логику кода с учетом порядка ключей в словаре.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.