Как работает defaultdict в Python: подробное объяснение с примерами

Python defaultdict:

Python's defaultdict is a subclass of the built-in dict class. It provides a default value for a key that doesn't exist in the dictionary. When initializing a defaultdict, you specify a default factory function that will be used to create a default value whenever a key is accessed for the first time.

Here's an example to illustrate how defaultdict works:


from collections import defaultdict

fruit_counts = defaultdict(int)
fruit_counts['apple'] += 1
fruit_counts['banana'] += 1
fruit_counts['orange'] += 1

print(fruit_counts['apple'])   # Output: 1
print(fruit_counts['banana'])  # Output: 1
print(fruit_counts['orange'])  # Output: 1
print(fruit_counts['grape'])   # Output: 0 (default value)

In this example, we create a defaultdict called fruit_counts with a default factory function int, which initializes the default value to 0. We then increment the count for each fruit using the syntax fruit_counts[fruit_name] += 1.

Since 'grape' doesn't exist in the dictionary, accessing fruit_counts['grape'] returns the default value of 0. This avoids a KeyError that would occur with a regular dictionary.

By using defaultdict, you can simplify your code by avoiding explicit checks for missing keys and initializing them with default values.

Детальный ответ

Как работает defaultdict в Python

Python предлагает множество полезных структур данных, таких как словари (dict), списки (list), множества (set) и другие. Однако, когда речь идет о словарях, бывает полезно использовать модуль collections и его класс defaultdict.

Что такое defaultdict

defaultdict - это подкласс словаря (dict) в модуле collections. В отличие от обычного словаря, defaultdict автоматически создает значение по умолчанию для ключей, которых еще нет в словаре. Позволяет избежать ошибки KeyError, которая обычно возникает при обращении к несуществующему ключу.

Пример использования defaultdict

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


    from collections import defaultdict
    
    # Создаем defaultdict с значением-функцией int()
    d = defaultdict(int)
    
    # Добавляем новые значения
    d['apple'] = 5
    d['banana'] = 3
    
    # Получаем значение существующего ключа
    print(d['apple'])  # Вывод: 5
    
    # Получаем значение несуществующего ключа
    print(d['orange'])  # Вывод: 0 (значение по умолчанию)
    

В данном примере мы создаем defaultdict, используя функцию int() в качестве значения-функции. Когда мы обращаемся к ключу 'apple', мы получаем его значение, равное 5, которое мы установили ранее. Однако, когда мы обращаемся к ключу 'orange', которого еще нет в словаре, defaultdict автоматически создает значение по умолчанию, равное 0.

Задание значения-функции

Мы можем задать любую функцию в качестве значения-функции для defaultdict. Например:


    from collections import defaultdict
    
    def default_value():
        return 'N/A'
    
    d = defaultdict(default_value)
    
    d['name'] = 'John'
    d['age'] = 25
    
    print(d['name'])  # Вывод: John
    print(d['city'])  # Вывод: N/A (значение по умолчанию)
    

В этом примере мы определяем функцию default_value(), которая возвращает строку 'N/A'. Затем мы создаем defaultdict, используя эту функцию в качестве значения-функции. Когда мы обращаемся к существующему ключу 'name', мы получаем его значение, а когда мы обращаемся к ключу 'city', которого нет в словаре, defaultdict возвращает значение по умолчанию 'N/A'.

Рекурсивный defaultdict

Помимо использования обычного значения-функции, вы также можете использовать defaultdict для создания рекурсивного словаря.


    from collections import defaultdict
    
    # Создаем рекурсивный defaultdict
    tree = lambda: defaultdict(tree)
    d = tree()
    
    d['fruit']['apple'] = 'red'
    d['fruit']['banana'] = 'yellow'
    
    print(d['fruit']['apple'])  # Вывод: red
    print(d['fruit']['banana'])  # Вывод: yellow
    

В этом примере мы используем лямбда-функцию, чтобы создать рекурсивную функцию tree(). Эта функция возвращает новый defaultdict, когда вызывается. Затем мы создаем словарь d, используя tree(). Мы можем добавлять новые ключи и значения в d, как обычный словарь. Результатом является структура данных, представляющая дерево, где ключи и значения могут быть другими словарями.

Заключение

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

Видео по теме

Сollections defaultdict python

Advanced Dictionaries: defaultdict in Python

32 Словари (dict) Python. Операции и методы словаря.

Похожие статьи:

Что такое pd dataframe python и зачем нужно это?

🔙 Как сделать возврат в начало скрипта Python

🔧 Как запустить код с git на питоне: подробное руководство

Как работает defaultdict в Python: подробное объяснение с примерами

🔍 Как сделать дробь в Python? Простой пошаговый гайд и примеры 🖥️

Как проверить установлен ли модуль в Python? 🐍🔍

💡Зачем использовать множества в Python?💡