Примечание. Следующая статья поможет вам: Как и когда следует использовать Defaultdict в Python?
В этом уроке вы узнаете, как использовать defaultdict из модуля коллекций Python — для лучшей обработки KeyErrors — при работе со словарями Python.
В Python словарь — это мощная встроенная структура данных, которая хранит данные в парах ключ-значение. Вы будете использовать клавиши для входа в словарь и доступа к значениям.
Однако если в вашем скрипте Python есть несколько словарей, которые изменяются во время выполнения кода, вы часто будете сталкиваться с ошибками KeyError. И есть несколько разных способов справиться с ними.
В этом уроке вы узнаете:
Давайте начнем!
Что такое KeyErrors в Python?
При определении словаря Python вы должны позаботиться о том, чтобы убедиться в следующем:
Таким образом, ключ действителен только в том случае, если он присутствует в словаре; иначе это приводит к KeyErrors.
Рассмотрим следующий словарь books_authors, в котором ключи — это названия книг, а значения — имена авторов.
Вы можете кодировать вместе с этим руководством в Python REPL.
books_authors = { ‘Глубокая работа’: ‘Кэл Ньюпорт’, ‘Гиперфокус’: ‘Крис Бэйли’, ‘Основа’: ‘Дженни Блейк’, ‘Уравнение счастья’: ‘Нил Пасрича’ }
Вы можете использовать ключ (название книги) для доступа к имени автора.
книги_авторы[‘Hyperfocus’]
‘Крис Бейли’
Чтобы получить доступ ко всем парам ключ-значение в словаре, вы можете вызвать метод items() для объекта словаря, как показано ниже:
для книги,автор в books_authors.items(): print(f”‘{book}’ by {author}”) ‘Deep Work’ Кэла Ньюпорта ‘Hyperfocus’ Криса Бэйли ‘Pivot’ Дженни Блейк ‘Уравнение счастья’ Нил Пасрича
Если вы попытаетесь получить доступ к значению ключа, которого нет в словаре, интерпретатор Python выдаст ошибку KeyError. Мы сталкиваемся с KeyError, когда пытаемся получить доступ к значению несуществующих ключей, а именно «Grit» и «несуществующий ключ».
книги_авторы[‘Grit’]
————————————————– ————————- KeyError Traceback (последний последний вызов)
KeyError: ‘Выдержка’ books_authors[‘non-existent-key’]
————————————————– ————————- KeyError Traceback (последний последний вызов)
KeyError: «несуществующий ключ»
Итак, как вы справляетесь с KeyErrors в Python?
Есть несколько способов сделать это, и мы изучим их в следующем разделе.
Как обрабатывать KeyErrors в Python
Давайте узнаем, как обрабатывать KeyErrors, используя:
№1. Использование условных операторов if-else
Один из самых простых способов обработки KeyErrors в Python — использование условных операторов if-else.
В Python операторы if-else имеют следующий общий синтаксис:
if условие: # сделать это еще: # сделать что-то еще
В этом примере условием является проверка наличия ключа в словаре.
Если ключ присутствует в словаре, оператор in вернет True, а если тело будет выполнено, выведет соответствующее значение.
key = ‘Уравнение счастья’, если ключ в books_authors: print(books_authors[key]) else: print(‘К сожалению, такого ключа не существует!’) # Вывод # Нейл Пасрича
Если ключ отсутствует в словаре, оператор in возвращает значение False и выполняется тело else. Выдает сообщение о том, что ключ отсутствует.
key = ‘несуществующий ключ’, если ключ в books_authors: print(books_authors[key]) else: print(‘К сожалению, этот ключ не существует!’) # Вывод # К сожалению, этот ключ не существует!
№ 2. Использование операторов Try-Except
Другой распространенный метод обработки KeyError — использование операторов try-except в Python.
Прочитайте следующий блок кода:
key = ‘несуществующий ключ’ попробуйте: print(books_authors[key]) кроме KeyError: print(‘К сожалению, этот ключ не существует!’)
№3. Использование метода .get()
В Python вы можете использовать встроенный метод словаря .get() для обработки отсутствующих ключей.
Общий синтаксис для использования метода get(): dict.get(key,default_value), где dict — допустимый объект словаря в Python.
– Если ключ присутствует в словаре, то метод get() возвращает значение. – В противном случае он возвращает значение по умолчанию.
В этом примере keys — это список ключей, к значениям которых мы хотели бы получить доступ. Мы перебираем список ключей, чтобы получить соответствующие значения из словаря books_authors.
Здесь мы использовали метод .get() со значением по умолчанию «Не существует».
ключи = [‘Grit’,’Hyperfocus’,’Make Time’,’Deep Work’]
для ключа в ключах: print(books_authors.get(key,’Не существует’))
В приведенном выше коде:
# Вывод Не существует Крис Бейли Не существует Кэл Ньюпорт
Все вышеперечисленные методы помогают нам в обработке ключевых ошибок. Однако они многословны и требуют, чтобы мы явно обрабатывали отсутствующие ключи. Вы можете упростить этот процесс, используя defaultdict вместо обычного словаря.
Defaultdict в Python
defaultdict является подклассом класса словаря (dict). Таким образом, он наследует поведение словаря Python. Кроме того, он также изначально обрабатывает отсутствующие ключи.
defaultdict — это контейнерный тип данных, встроенный в стандартную библиотеку Python — внутри модуля collections.
Итак, вы должны импортировать его в свою рабочую среду:
из коллекций импортировать defaultdict
Вот общий синтаксис для использования defaultdict:
defaultdict(default_factory)
Вы можете указать вызываемый объект, такой как int, float или list, в качестве атрибута default_factory. Если вы не укажете значение для default_factory, по умолчанию оно равно None.
Когда ключ, который вы ищете, отсутствует, запускается метод __missing__(), который выводит значение по умолчанию из default_factory. Затем он возвращает это значение по умолчанию.
В итоге:
Примеры Python Defaultdict
Далее мы напишем несколько примеров, чтобы понять, как работает Python defaultdict.
Defaultdict в Python с целочисленным значением по умолчанию
Сначала импортируйте defaultdict из модуля collections.
из коллекций import defaultdict import random
Давайте создадим цены по умолчанию.
цены = defaultdict(int)
Теперь мы заполняем словарь цен, используя элементы списка фруктов в качестве ключей. И мы случайным образом выбираем значения из прайс-листа, чтобы получить значения.
прайс_лист = [10,23,12,19,5]
фрукты = [‘apple’,’strawberry’,’pomegranate’,’blueberry’]
на фрукты во фруктах: цены[fruit] = random.choice(price_list)
Давайте посмотрим на пары ключ-значение в defaultdict цен.
print(prices.items()) dict_items([(‘apple’, 12), (‘blueberry’, 19), (‘pomegranate’, 5), (‘strawberry’, 10)])
Как и в обычном словаре Python, вы можете получить доступ к значениям defaultdict цен с помощью ключей:
Цены[‘apple’]
№ 23
Теперь давайте попробуем получить доступ к цене фрукта, которого нет, скажем, «апельсина». Мы видим, что он возвращает нулевое значение.
Цены[‘orange’]
# 0
Если мы распечатаем словарь, мы увидим, что был добавлен новый ключ «оранжевый» с целочисленным значением по умолчанию, равным нулю.
print(prices.items()) dict_items([(‘apple’, 12), (‘blueberry’, 19), (‘pomegranate’, 5), (‘strawberry’, 10), (‘orange’, 0)])
Defaultdict в Python со списком в качестве значения по умолчанию
Давайте определим student_majors как список списков по умолчанию. Имена майоров являются ключами. А значения — это списки студентов, изучающих каждую из специальностей, таких как математика, экономика, информатика и другие.
из коллекций импортировать defaultdict student_majors = defaultdict(list)
Если мы попытаемся получить доступ к списку студентов, соответствующему «Экономике», defaultdict вернет пустой список; никаких ключевых ошибок!
student_majors[‘Economics’]
# []
Теперь у нас есть пустой список, привязанный к специальности «Экономика». Итак, теперь мы можем добавлять элементы в этот список, используя метод списка .append().
student_majors[‘Economics’].append(‘Алекс’)
Запись была создана для «Экономики» в словаре по умолчанию student_majors.
print(students_majors) defaultdict(, {‘Экономика’: [‘Alex’]})
Вы можете добавить больше студентов в список, сопоставленный с специализацией «Экономика», добавить новую специализацию и многое другое!
student_majors[‘Economics’].append(‘Боб’) student_majors[‘Math’].append(‘Лаура’) print(students_majors) defaultdict(, {‘Экономика’: [‘Alex’, ‘Bob’]”Математика”: [‘Laura’]})
Вывод
Я надеюсь, что это руководство помогло вам понять, как и когда вы должны использовать defaultdict в Питоне. После запуска примеров кода в этом руководстве вы можете попробовать использовать defaultdict в качестве предпочтительной структуры данных в своих проектах, когда это необходимо.
Вот краткое изложение того, что вы узнали в этом уроке.
Затем ознакомьтесь с учебным пособием по функции карты Python.