Советы и рекомендации по использованию словаря Python, которые всегда следует помнить.
Освоив эти советы, вы сделаете код вашего словаря короче, безопаснее и проще для чтения.
# Введение
Словари в Python полезны для всего: от конфигурационных файлов и данных JSON до ответов API. Большинство начинающих изучают только основы, такие как создание словаря, доступ к ключу и обновление значения. Вот и всё. Однако словари — это гораздо больше, чем просто словари. В этой статье мы рассмотрим 7 советов, которые сделают ваш код чище и более «питоничным» . Итак, начнём.
# Использование метода `.get()` вместо квадратных скобок `[]` для поиска
Допустим, вы работаете со словарем и вам нужно получить доступ к его значению. Но что, если ключа нет? Допустим, у нас есть словарь конфигурации, и вы пытаетесь вывести ключ «timeout» следующим образом:
config = {«debug»: True, «verbose»: False} print(config[«timeout»])
Выход:
————————————————————————— KeyError Traceback (most recent call last) —-> 2 print(config[«timeout»]) KeyError: 'timeout'
Это не сработает. Вы получите ошибку KeyError, потому что ключ «timeout» отсутствует в словаре. Вместо этого следует использовать метод .get(). Это безопаснее, и вы можете установить значение по умолчанию, если ключ отсутствует.
config = {«debug»: True, «verbose»: False} print(config.get(«timeout», 30))
Выход:
30
В результате будет выведено число 30, которое является значением по умолчанию. Однако, если отсутствие ключа является ошибкой, используйте квадратные скобки. В этом случае сообщение об ошибке должно отобразиться немедленно.
# Использование defaultdict для группировки данных
Если вы работаете со списком слов и хотите подсчитать, сколько раз каждое слово встречается, вы можете написать код следующим образом:
words = [«apple», «banana», «apple», «cherry», «banana», «banana»] counts = {} for word in words: if word not in counts: counts[word] = 0 counts[word] += 1 print(counts)
Выход:
{'яблоко': 2, 'банан': 3, 'вишня': 1}
Это работает, но немного многословно. Использование `defaultdict` в Python делает код чище:
from collections import defaultdict words = [«apple», «banana», «apple», «cherry», «banana», «banana»] counts = defaultdict(int) for word in words: counts[word] += 1 print(counts)
Выход:
defaultdict(, {'apple': 2, 'banana': 3, 'cherry': 1})
Поскольку мы использовали defaultdict(int), Python автоматически устанавливает значение по умолчанию равным 0 при каждом обращении к отсутствующему ключу.
# Объединение словарей с помощью оператора |
В современном Python наиболее удобный способ объединения словарей — использование оператора |.
defaults = {«color»: «blue», «size»: «medium»} overrides = {«size»: «large», «weight»: «heavy»} merged = defaults | overrides print(merged)
Выход:
{'color': 'blue', 'size': 'large', 'weight': 'heavy'}
Когда ключи перекрываются, побеждает словарь справа. Для слияния на месте можно использовать оператор |=:
defaults |= overrides print(defaults)
Выход:
# Распаковка словарей в аргументы функций
Допустим, у вас есть функция и словарь, и их поля или ключи совпадают. Вместо того чтобы передавать ключи по одному, например, name=data[«name»], age=data[«age»], вы можете передавать все данные, используя оператор ** с двойной звездочкой. Давайте создадим функцию для работы с пользователями и некоторые фиктивные данные пользователя, чтобы понять принцип её работы:
def create_user(name, age, role=»viewer»): return {«name»: name, «age»: age, «role»: role} user_data = { «name»: «David», «age»: 33 }
# Обычный способ user = create_user( name=user_data[«name»], age=user_data[«age»], role=user_data[«role»] ) print(user)
Выход:
{'name': 'David', 'age': 33, 'role': 'viewer'}
# Использование ** print(create_user(**user_data))
Выход:
Обратите внимание, что в приведенном выше примере «Обычный способ» возникнет ошибка KeyError, поскольку в user_data отсутствует ключ «role». Подход с распаковкой корректно использует значение по умолчанию для role, что делает его более чистым и надежным.
# Использование оператора Walrus с Dicts
В Python 3.8 был введен оператор «морж» (:=), который позволяет присваивать значение в качестве части выражения. Это очень полезно при работе со словарями.
Допустим, у вас есть словарь, и вы хотите получить данные о пользователе и его имя, если он существует. Обычно это делается следующим образом:
data = { «user»: { «name»: «Bryan», «email»: «bryan@gmail.com» } } if data.get(«user») is not None: user = data.get(«user») name = user.get(«name») print(name)
Выход:
Брайан
Это работает, но при этом поиск в словаре повторяется несколько раз. Вы можете заменить это оператором «морж» (:=), который выполняет поиск и присваивает значение за один шаг:
if (user := data.get(«user»)) is not None: name = user.get(«name») print(name)
Выход:
Брайан
Это особенно полезно при работе с вложенными словарными структурами.
# Использование TypedDict для структурированных данных
Словари обладают гибкостью, но эта гибкость иногда может стать проблемой. Например:
def greet(user): return f»Привет, {user['name']}!» user = { «name»: «Clair», «age»: «thirty» } print(greet(user))
Выход:
Привет, Клэр!
Это работает во время выполнения, но есть скрытая проблема: «age» должно быть числом, а не строкой. Сам Python не будет выдавать ошибок, что может привести к багам в более крупных проектах. TypedDict делает ожидаемую структуру словаря явной:
from typing import TypedDict class UserProfile(TypedDict): name: str age: int def greet(user: UserProfile) -> str: return f»Hello, {user['name']}!»
Теперь такие инструменты, как mypy, могут выявлять ошибки до выполнения кода:
пользователь: UserProfile = { «имя»: «Клэр», «возраст»: «тридцать», } print(greet(user))
Выход:
test.py:15: ошибка: Несовместимые типы (выражение имеет тип «str», элемент TypedDict «age» имеет тип «int») [typeddict-item] Обнаружена 1 ошибка в 1 файле (проверен 1 исходный файл)
Для более сложных проверок зачастую лучше подходят такие инструменты, как dataclasses или Pydantic .
# Удобная итерация: .items(), .keys(), .values()
В Python для работы со словарями существует множество встроенных методов итерации: `.items()`, `.keys()` и `.values()`. Большинство разработчиков знают о них, но используют не так часто, как следовало бы. Например, они могут перебирать элементы словаря следующим образом:
scores = { «David»: 92, «Bryan»: 87, «Clair»: 95 } for name in scores: print(name, scores[name])
Выход:
Дэвид 92 Брайан 87 Клэр 95
Это работает. Но это не лучший способ — он выполняет дополнительный поиск в словаре каждый раз в цикле. Метод `.items()` в Python более удобен:
for name, score in scores.items(): print(name, score)
Выход:
Дэвид 92 Брайан 87 Клэр 95
Этот метод возвращает и ключ, и значение вместе, что позволяет избежать повторных обращений и делает код более читаемым. Если вам нужны только ключи, используйте метод `.keys()`. Аналогично, если вам нужны только значения, используйте метод `.values()`.
# Завершение
Словари Python на первый взгляд кажутся простыми, но изучение нескольких ключевых шаблонов может значительно улучшить ваш код. Вы можете перейти по этой ссылке, чтобы узнать больше о функциях, связанных со словарями Python. Такие возможности, как `.get()`, `defaultdict`, распаковка и `TypedDict`, помогают сократить повторяющийся код и повысить надежность ваших программ.
Канвал Мехрин — инженер по машинному обучению и технический писатель, глубоко увлеченная наукой о данных и взаимодействием ИИ с медициной. Она является соавтором электронной книги «Максимизация производительности с помощью ChatGPT». Как стипендиат программы Google Generation Scholar 2022 для Азиатско-Тихоокеанского региона, она выступает за разнообразие и академическое превосходство. Она также является стипендиатом программы Teradata Diversity in Tech Scholar, стипендиатом Mitacs Globalink Research Scholar и стипендиатом Harvard WeCode Scholar. Канвал — убежденная сторонница перемен, основавшая FEMCodes для расширения прав и возможностей женщин в областях STEM (наука, технология, инженерия и математика).
Источник: www.kdnuggets.com
Оцените материал:
Похожие записи
Биосенсоры с расширенным рабочим диапазоном ускорят разработку отечественного непрерывного датчика глюкозы
21.10.2025
Первые коммерческие космические станции начнут вращаться вокруг Земли в 2026 году.
06.01.2026
Paid, стартап Мэнни Медины, предлагающий услуги по «биллингу на основе результатов» с использованием ИИ, привлек огромные $21 млн посевного финансирования
29.09.2025Присоединяйтесь и подпишитесь на рассылку самых свежих новостей по Email
Получайте свежие новости и идеи на почту. Без спама — только самое интересное.
Нажимая «Подписаться», вы соглашаетесь с политикой конфиденциальности.
