Архив рубрики ~Лента новостей~

Советы и рекомендации по использованию словаря Python, которые всегда следует помнить.

Советы и рекомендации по использованию словаря Python, которые всегда следует помнить.
Советы и рекомендации по использованию словаря 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

❌ Нет похожих статей с такими тегами

Оцените материал:

Поделиться
Понравилась статья? Расскажите другим
ВКонтакте
Читайте также
Архив рубрики ~Обо всем~ Я провел тесты Siri AI на MacOS 27, используя те же методы, что и для ChatGPT и Gemini — вот результаты. Архив рубрики ~Обо всем~ Ранние земледельцы из неолитического поселения получали битум из двух источников. На это указал анализ находок из окрестностей Иерусалима Архив рубрики ~Обо всем~ Кишечные бактерии предскажут эффективность иммунотерапии только в сообществе: Медицина Архив рубрики ~Обо всем~ Ответы на мини-кроссворд NYT за пятницу, 19 июня. Архив рубрики ~Обо всем~ Магазин отказал в гарантии покупателю RX 9070 XT, пострадавшей от плавления 12V-2×6 Архив рубрики ~Коротко из Telegram~ От ANDROID AVTO с любовью 🚘 Архив рубрики ~Коротко из Telegram~ AVG Cleaner — Полезная системная утилита, которая позволит интеллектуально анализировать… Архив рубрики ~Коротко из Telegram~ Новость из Telegram 19.06.2026 22:20 Архив рубрики ~Коротко из Telegram~ ✅Solid Explorer File Manager ▶️Версия: 3.5.7 💬Solid Explorer File Manager… Архив рубрики ~Обо всем~ Зарянка покормила птенца оляпки. Необычный случай зафиксирован в Шотландии Новости робототехники Компания General Intuition ведет переговоры о привлечении 300 миллионов долларов при оценке примерно в 2 миллиарда долларов. Архив рубрики ~Обо всем~ Нейробиология юмора. Главное, что надо знать? Новости робототехники Чему меня научил Astro от Amazon о том, как наделить роботов душой. Архив рубрики ~Обо всем~ Компания Adobe интегрировала свой голосовой помощник Firefly AI Assistant в Premiere, Photoshop и Illustrator. Архив рубрики ~Обо всем~ Я провел тесты Siri AI на MacOS 27, используя те же методы, что и для ChatGPT и Gemini — вот результаты. Архив рубрики ~Обо всем~ Ранние земледельцы из неолитического поселения получали битум из двух источников. На это указал анализ находок из окрестностей Иерусалима Архив рубрики ~Обо всем~ Кишечные бактерии предскажут эффективность иммунотерапии только в сообществе: Медицина Архив рубрики ~Обо всем~ Ответы на мини-кроссворд NYT за пятницу, 19 июня. Архив рубрики ~Обо всем~ Магазин отказал в гарантии покупателю RX 9070 XT, пострадавшей от плавления 12V-2×6 Архив рубрики ~Коротко из Telegram~ От ANDROID AVTO с любовью 🚘 Архив рубрики ~Коротко из Telegram~ AVG Cleaner — Полезная системная утилита, которая позволит интеллектуально анализировать… Архив рубрики ~Коротко из Telegram~ Новость из Telegram 19.06.2026 22:20 Архив рубрики ~Коротко из Telegram~ ✅Solid Explorer File Manager ▶️Версия: 3.5.7 💬Solid Explorer File Manager… Архив рубрики ~Обо всем~ Зарянка покормила птенца оляпки. Необычный случай зафиксирован в Шотландии Новости робототехники Компания General Intuition ведет переговоры о привлечении 300 миллионов долларов при оценке примерно в 2 миллиарда долларов. Архив рубрики ~Обо всем~ Нейробиология юмора. Главное, что надо знать? Новости робототехники Чему меня научил Astro от Amazon о том, как наделить роботов душой. Архив рубрики ~Обо всем~ Компания Adobe интегрировала свой голосовой помощник Firefly AI Assistant в Premiere, Photoshop и Illustrator.

Оставить комментарий