W3docs

Python словари: доступ к элементам

Все способы доступа к элементам словаря Python: скобки, get(), keys(), values(), items(), проверка вхождения и вложенные словари.

Python словари хранят данные в виде пар «ключ-значение». Умение читать значения из словаря — и знание того, что происходит при отсутствии ключа — является основой работы с любым словарём. В этой главе рассмотрены все стандартные способы доступа: скобочная нотация, метод .get(), перебор с помощью .keys(), .values() и .items(), а также проверка вхождения с помощью in.

Скобочная нотация

Самый прямой способ получить значение — написать имя словаря, а затем ключ в квадратных скобках.

Получение значения словаря по ключу

python— editable, runs on the server

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()

python— editable, runs on the server

Задание значения по умолчанию

Передайте второй аргумент в .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)    # True

in проверяет только ключи, но не значения. Операция выполняется за 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()), чтобы получить внутреннее значение.

Доступ к значениям вложенного словаря

python— editable, runs on the server

Для безопасного доступа через несколько уровней используйте цепочку вызовов .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()

Что дальше

Освоив чтение значений из словаря, следует изучить:

Практика

Практика
In Python, which principles are applied to access items from a list or a dictionary?
In Python, which principles are applied to access items from a list or a dictionary?
Was this page helpful?