Python словари: доступ к элементам
Все способы доступа к элементам словаря Python: скобки, get(), keys(), values(), items(), проверка вхождения и вложенные словари.
Python словари хранят данные в виде пар «ключ-значение». Умение читать значения из словаря — и знание того, что происходит при отсутствии ключа — является основой работы с любым словарём. В этой главе рассмотрены все стандартные способы доступа: скобочная нотация, метод .get(), перебор с помощью .keys(), .values() и .items(), а также проверка вхождения с помощью in.
Скобочная нотация
Самый прямой способ получить значение — написать имя словаря, а затем ключ в квадратных скобках.
Получение значения словаря по ключу
Python ищет 'Bob' в хеш-таблице и возвращает его значение за O(1) времени, независимо от количества ключей в словаре.
KeyError при отсутствии ключа
Если ключ не существует, Python вызывает KeyError и останавливает выполнение.
ages = {'Alice': 27, 'Bob': 34, 'Charlie': 45}
print(ages['Dave']) # KeyError: 'Dave'Всегда обрабатывайте этот случай — либо предварительно проверяя вхождение (см. раздел об операторе in ниже), либо используя .get().
Метод .get()
.get(key) возвращает значение для key, если он существует, и None в противном случае — исключение не возникает.
Безопасный доступ к ключу словаря с помощью .get()
Задание значения по умолчанию
Передайте второй аргумент в .get(), чтобы получить резервное значение вместо None:
colors = {'apple': 'red', 'banana': 'yellow', 'grape': 'purple'}
color = colors.get('orange', 'unknown')
print(color) # unknownЭто идиоматичный способ обращаться к ключу, который может как присутствовать, так и отсутствовать, не оборачивая код в блок try/except.
Проверка вхождения с помощью in
Используйте оператор in, чтобы проверить наличие ключа перед обращением к нему:
ages = {'Alice': 27, 'Bob': 34, 'Charlie': 45}
if 'Alice' in ages:
print(ages['Alice']) # 27
print('Dave' in ages) # False
print('Bob' in ages) # Truein проверяет только ключи, но не значения. Операция выполняется за O(1) времени, так как словари основаны на хешировании.
Доступ ко всем ключам, значениям и элементам
Словари Python предоставляют три объекта-представления, позволяющих перебирать или изучать их содержимое без создания отдельного списка.
.keys() — все ключи
colors = {'apple': 'red', 'banana': 'yellow', 'grape': 'purple'}
print(colors.keys())
# dict_keys(['apple', 'banana', 'grape'])
for fruit in colors.keys():
print(fruit)
# apple
# banana
# grape.values() — все значения
colors = {'apple': 'red', 'banana': 'yellow', 'grape': 'purple'}
print(colors.values())
# dict_values(['red', 'yellow', 'purple'])
for color in colors.values():
print(color)
# red
# yellow
# purple.items() — пары ключ-значение
.items() возвращает каждую запись в виде кортежа (key, value). Распаковка кортежа делает этот метод наиболее удобным для большинства задач перебора:
colors = {'apple': 'red', 'banana': 'yellow', 'grape': 'purple'}
for fruit, color in colors.items():
print(f'{fruit} is {color}')
# apple is red
# banana is yellow
# grape is purpleОбъекты-представления динамичны — они отражают текущее состояние словаря. Если после создания представления добавить или удалить ключ, представление обновится автоматически.
Доступ к элементам вложенного словаря
Когда значением словаря является другой словарь, используйте цепочку квадратных скобок (или вызовы .get()), чтобы получить внутреннее значение.
Доступ к значениям вложенного словаря
Для безопасного доступа через несколько уровней используйте цепочку вызовов .get():
title = library.get('book4', {}).get('title', 'Not found')
print(title) # Not foundПодробнее о многоуровневых структурах данных читайте в главе Вложенные словари.
Выбор подходящего метода доступа
| Ситуация | Рекомендуемый подход |
|---|---|
| Ключ гарантированно существует | d[key] — ясно и быстро |
Ключ может отсутствовать, None приемлем | d.get(key) |
| Ключ может отсутствовать, нужно резервное значение | d.get(key, default) |
| Проверка перед обращением | if key in d: d[key] |
| Перебор всех записей | for k, v in d.items() |
Что дальше
Освоив чтение значений из словаря, следует изучить:
- Добавление элементов — вставка новых пар ключ-значение
- Изменение элементов — обновление существующих значений
- Перебор словарей — шаблоны итерации подробно
- Методы словаря — полный справочник методов