Метод get() для словарей Python: практическое руководство

Раздел: Структуры данных -> Словари

Метод get() словаря в Python: безопасный доступ к значениям

Метод get() позволяет получить значение словаря по ключу, не вызывая исключение KeyError, если ключ отсутствует. Это основная причина его применения - безопасный и гибкий доступ к данным.

Самый эффективный и рекомендуемый способ - вызов dict.get(key, default=None). Если ключ существует, возвращается его значение; если нет - возвращается default (по умолчанию None).

user = {'name': 'Анна', 'age': 25}
city = user.get('city')
print(city)  # None

словарь слов python (словарь слов в python)

None

Python значение ключа словаря (значение ключа словаря в python)

Здесь get() не вызывает ошибку, а просто возвращает None, что удобно для дальнейшей обработки.

Как получить значение с подменой по умолчанию при отсутствии ключа?

Часто требуется не None, а какое-то значение по умолчанию. Передаётся второй аргумент:

score = {'математика': 90}
algebra = score.get('алгебра', 0)
print(algebra)  # 0

ключ значение в python (пары ключ-значение в python)

0

получить значение ключа python (получение значения ключа в python)

Это удобно для подсчёта статистики, конфигураций и настроек.

Как проверить существование ключа без ошибки, используя get?

Метод get() можно использовать для проверки, но это не самый читаемый способ. Сравнение с None может дать ложный результат, если само значение равно None. В таких случаях лучше применять оператор in.

d = {'a': None}
# Проблемы с проверкой через get
if d.get('a') is None:
    print('ключа нет или значение None')
# Для надёжной проверки используют 'in'
if 'a' in d:
    print('ключ существует, значение:', d['a'])

Python получить ключ (получение ключа словаря в python)

ключа нет или значение None
ключ существует, значение: None

словарь значения python (словарь значений в python)

Типичная ошибка: попытка использовать get() для проверки наличия ключа, когда значение может быть None.

config = {'debug': None}
if config.get('debug'):
    print('отладка включена')  # не сработает, хотя ключ есть
# Решение: использовать 'in' или явное сравнение с None
if 'debug' in config:
    print('ключ debug присутствует')

список значений словаря python (список значений словаря в python)

ключ debug присутствует

удаление словаря python (удаление элемента из словаря в python)

Ещё одна ошибка: путать get() с обращением по квадратным скобкам и получать KeyError там, где его можно было избежать. Например, при переборе ключей, которых может не быть.

data = {'x': 1}
# Неправильно:
# value = data['y']  # KeyError
# Правильно:
value = data.get('y', 0)

Итак, get() - универсальное средство для безопасного чтения из словаря, особенно когда отсутствие ключа не является ошибкой, а лишь поводом использовать значение по умолчанию.

- Python найти в словаре (поиск ключа в словаре python)
- Python элемент словаря по ключу (получение элемента словаря по ключу)
- Python dict в строку (преобразование словаря в строку в python)

Расширенные примеры использования метода get()

Пример 1. Построение частотного словаря

Подсчёт количества вхождений слов в тексте - классическая задача. Без get() пришлось бы проверять каждый ключ через in.

Пример
text = 'яблоко апельсин яблоко банан яблоко апельсин'
words = text.split()
counter = {}
for word in words:
    counter[word] = counter.get(word, 0) + 1
print(counter)
{'яблоко': 3, 'апельсин': 2, 'банан': 1}

Пример 2. Вложенные словари с get()

Метод get() можно применять каскадно для безопасного доступа к глубоким уровням.

Пример
config = {
    'database': {
        'host': 'localhost',
        'port': 5432
    }
}
host = config.get('database', {}).get('host', 'localhost')
print(host)  # localhost
port = config.get('database', {}).get('port', 3306)
print(port)  # 5432
# Если ключа 'database' нет, {} вернёт default для второго get
bad = config.get('cache', {}).get('type', 'redis')
print(bad)  # redis
localhost
5432
redis

Пример 3. Использование get() в словарях со списками

Если значения - списки, удобно добавлять элементы без предварительной проверки.

Пример
groups = {}
students = [('A', 'Иван'), ('A', 'Мария'), ('B', 'Петр')]
for group, name in students:
    groups[group] = groups.get(group, []) + [name]
print(groups)
{'A': ['Иван', 'Мария'], 'B': ['Петр']}

Альтернатива - setdefault(), которая сразу инициализирует пустой список при отсутствии.

Пример 4. get() с изменяемыми объектами по умолчанию

Значение по умолчанию вычисляется каждый раз при вызове get(), поэтому можно передавать результат вызова функции или конструктора.

Пример
import datetime
default_date = datetime.date.today()
extended = {'event': None}
date = extended.get('date', default_date)
print(date)  # сегодняшняя дата (вычисляется в момент вызова)
2025-04-09

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

Пример 5. get() и классы с кастомными методами

Метод get() существует у всех отображений, включая defaultdict и OrderedDict. В defaultdict get() работает аналогично, но default_factory не вызывается, если ключ отсутствует - возвращается None или переданный default.

Пример
from collections import defaultdict
dd = defaultdict(int)
dd['a'] = 1
print(dd.get('b'))       # None
print(dd.get('b', 100))  # 100
print(dd['b'])           # 0 (создаётся автоматически default_factory)
None
100
0

Пример 6. Сравнение производительности get() и try/except

Для случаев, когда ключ почти всегда существует, быстрее может быть прямой доступ с обработкой исключения, но get() предпочтительнее по читаемости.

Пример
import timeit
large_dict = {i: i for i in range(1000)}

def use_get():
    return large_dict.get(500, 0)

def use_try():
    try:
        return large_dict[500]
    except KeyError:
        return 0

print('get:', timeit.timeit(use_get, number=100000))
print('try:', timeit.timeit(use_try, number=100000))
get: 0.0045
try: 0.0039

Разница незначительная, выбирают по стилю кода.

Метод get() словаря в Python - comments

En
Python get value (python)