Tehnografi.com - Технологические новости, обзоры и советы

Как и когда следует использовать Defaultdict в Python?

Примечание. Следующая статья поможет вам: Как и когда следует использовать Defaultdict в Python?

В этом уроке вы узнаете, как использовать defaultdict из модуля коллекций Python — для лучшей обработки KeyErrors — при работе со словарями Python.

В Python словарь — это мощная встроенная структура данных, которая хранит данные в парах ключ-значение. Вы будете использовать клавиши для входа в словарь и доступа к значениям.

Однако если в вашем скрипте Python есть несколько словарей, которые изменяются во время выполнения кода, вы часто будете сталкиваться с ошибками KeyError. И есть несколько разных способов справиться с ними.

В этом уроке вы узнаете:

  • Что такое KeyErrors и почему они возникают
  • Как обрабатывать KeyErrors
  • Как использовать Python defaultdict, подкласс, который наследуется от встроенного класса dict, для лучшей обработки отсутствующих ключей
  • Давайте начнем!

    Что такое KeyErrors в Python?

    1

    При определении словаря 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 (последний последний вызов) в —- > 1 книг_авторов[‘Grit’]

    KeyError: ‘Выдержка’ books_authors[‘non-existent-key’]
    ————————————————– ————————- KeyError Traceback (последний последний вызов) в —- > 1 книг_авторов[‘non-existent-key’]

    KeyError: «несуществующий ключ»

    Итак, как вы справляетесь с KeyErrors в Python?

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

    Как обрабатывать KeyErrors в Python

    Как обрабатывать ключевые ошибки в Python

    Давайте узнаем, как обрабатывать KeyErrors, используя:

  • Условные операторы if-else
  • блоки try-кроме
  • Метод словаря .get()
  • №1. Использование условных операторов if-else

    Один из самых простых способов обработки KeyErrors в Python — использование условных операторов if-else.

    В Python операторы if-else имеют следующий общий синтаксис:

    if условие: # сделать это еще: # сделать что-то еще

  • Если условие истинно, операторы в теле if выполняются, и
  • Если условие равно False, выполняются операторы в теле else.
  • В этом примере условием является проверка наличия ключа в словаре.

    Если ключ присутствует в словаре, оператор 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

    2

    Другой распространенный метод обработки KeyError — использование операторов try-except в Python.

    Прочитайте следующий блок кода:

    key = ‘несуществующий ключ’ попробуйте: print(books_authors[key]) кроме KeyError: print(‘К сожалению, этот ключ не существует!’)

  • пытаться Блок пытается получить значение, соответствующее предоставленному ключу.
  • Если ключ отсутствует, интерпретатор выдает ошибку KeyError, которая обрабатывается как исключение в пределах кроме блокировать.
  • №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,’Не существует’))

    В приведенном выше коде:

  • Для ключей, присутствующих в словаре books_authors, метод .get() возвращает соответствующие значения.
  • Когда ключи не существуют, в данном случае «Выдержка» и «Выработка времени», метод .get() возвращает значение по умолчанию «Не существует».
  • # Вывод Не существует Крис Бейли Не существует Кэл Ньюпорт

    Все вышеперечисленные методы помогают нам в обработке ключевых ошибок. Однако они многословны и требуют, чтобы мы явно обрабатывали отсутствующие ключи. Вы можете упростить этот процесс, используя defaultdict вместо обычного словаря.

    Defaultdict в Python

    python-defaultdict

    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-Примеры-1

    Далее мы напишем несколько примеров, чтобы понять, как работает 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 вы часто будете сталкиваться с KeyErrors.
  • Для обработки таких ошибок KeyError вы можете использовать несколько подробных методов. Вы можете использовать условные операторы, блоки try-except или метод .get(). Но тип данных defaultdict в модуле collections может упростить эту обработку KeyError.
  • Вы можете использовать defaultdict(default_factory) куда default_factory является допустимым вызываемым.
  • Когда ключ отсутствует в defaultdict, значение по умолчанию (выведенное из default_factory) и ключ добавляется в defaultdict.
  • Затем ознакомьтесь с учебным пособием по функции карты Python.