Найти в Дзене
Машинное обучение

Эффективное программирование с помощью defaultdict() Python

Оглавление

В этой небольшой статье я хочу показать вам функцию, которая сделает ваш процесс разработки на Python более эффективным!

Я покажу вам, что такое defaultdict() и в чем разница между dict() и defaultdict() на примерах.

dict() и defaultdict()

Defaultdict — это хранилище данных, подобный словарям, который находится в модуле collections. Defaultdict — это подкласс словаря, который возвращает объект, подобный словарю. Функциональность как словарей, так и defaultdict почти одинакова, за исключением того факта, что defaultdict никогда не вызывает KeyError. Он возвращает значение по умолчанию для несуществующего ключа.

Синтаксис: defaultdict(default_factory)

Параметры:

default_factory: функция, возвращающая значение по умолчанию для определенного словаря. Если этот аргумент отсутствует, словарь выдает ошибку KeyError.

Как вы знаете, если попытаться вернуть значение из словаря по ключю которого нет, вы получите KeyError.

certificates = {}
students = [“Michael”, “George”, “Jesica”]
grades = [
{“History”: 50, “Mathematics”: 90, “Physics”: 70},
{“History”: 70, “Mathematics”: 85, “Physics”: 30},
{“History”: 60, “Mathematics”: 50, “Physics”: 60}
]for index, value in enumerate(grades):
certificates[students[index]].append(value)
>>> KeyError: ‘Michael’

Чтобы избежать ошибки, вы можете добавить оператор «if» в код :

for index, value in enumerate(grades):
if students[index] not in certificates:
certificates[students[index]] = []
certificates[students[index]].append(value)
>>> {
'Michael': [{'History': 50, 'Mathematics': 90, 'Physics': 70}],
'George': [{'History': 70, 'Mathematics': 85, 'Physics': 30}],
'Jesica': [{'History': 60, 'Mathematics': 50, 'Physics': 60}]
}

Но вы можете сделать свой код максимально понятным, используя defaultdict():

from collections import defaultdict
certificates = defaultdict(list)
for index, value in enumerate(grades):
certificates[students[index]].append(value)

>>> defaultdict(<class ‘list’>, {‘Michael’: [{‘History’: 50, ‘Mathematics’: 90, ‘Physics’: 70}], ‘George’: [{‘History’: 70, ‘Mathematics’: 85, ‘Physics’: 30}], ‘Jesica’: [{‘History’: 60, ‘Mathematics’: 50, ‘Physics’: 60}]})

В приведенном выше примере мы устанавливаем default_factory как список, и если мы вызываем отсутствующий ключ, мы получаем пустой список [] как значение по умолчанию для отсутствующего ключа. Также мы можем задать любые типы данных: int, str, dict, float, set, tuple, list.

Давайте попробуем все эти типы данных и проверим результаты:

test_dict = defaultdict(int)
>>> 0
test_dict = defaultdict(float)
>>> 0.0
test_dict = defaultdict(dict)
>>> {}
test_dict = defaultdict(list)
>>> []
test_dict = defaultdict(tuple)
>>> ()
test_dict = defaultdict(set)
>>> set()
test_dict = defaultdict(str)
>>> ‘’

Также вы можете установить собственное значение по умолчанию. default_factory должен быть вызываемым, поэтому мы можем сделать следующее:

test_dict = defaultdict(lambda: “Default value by lambda”)
test_dict[missing_key]
>>> ‘Default value by lambda’

или

def test_function():
return “Default value by usual function”test_dict = defaultdict(test_function)
>>> ‘Default value by usual function’

НО, если вы не установите default_factory, возвращаемое значение будет равно None, и в этом случае, если вы попытаетесь вызвать отсутствующий ключ, вы получите KeyError:

test_dict = defaultdict()
test_dict[“missing_key”]
>>> KeyError: missing_key

Спасибо за прочтение! Еще больше интересного в нашем канале.

Что-то пошло не так, и нам не удалось загрузить комментарии. Попробуйте ещё раз
Рекомендуем почитать
СЕКРЕТНЫЕ КОДЫ ChatGPT: Как сэкономить время и обойти 99% пользователей
Хотите выжать из ChatGPT максимум? Забудьте про скучные и длинные промпты! Есть несколько простых "секретных кодов", которые превратят ваш опыт работы с ИИ в настоящую магию. Эти пять команд помогут вам быстрее получать понятные, профессиональные или живые ответы, а также глубже разбираться в сложных темах. Погнали! Бывает, что тема кажется настоящим космосом, а времени вникать нет. Просто добавьте в запрос ELI5 (Explain Like I'm 5), и ChatGPT объяснит всё так просто, как будто вы ребёнок. Это идеально для сложных технических штук, научных концепций или запутанных инструкций...
10 скрытых возможностей Excel, которые заменят программиста 💻➡️📊
Excel — это не просто таблицы с цифрами. Современные версии содержат мощные инструменты, которые могут автоматизировать сложные задачи без единой строчки кода. Сегодня я покажу вам функции, которые заменят целый IT-отдел и сэкономят десятки часов рутинной работы! 🔗 Больше лайфхаков для офисных гениев — в Telegram-канале "Не баг, а фича" Что заменяет: Python-скрипты для обработки данных Где найти: "Данные" → "Получить данные" Power Query — это визуальная среда для: Пример из жизни: Ежемесячно сводите...
Что такое "вайбкодинг" и заменят ли "вайбкодеры" программистов?
Вайбкодинг — это новый тренд программирования, который родился на волне хайпа нейросетей. Простыми словами это работает так: ты пишешь запрос нейросети (к примеру ChatGPT), а она выдает тебе готовый код. На фоне этого появилось множество "псевдо программистов", называемых себя "вайбкодерами". Также стало появляться все больше редакторов кода со встроенным ИИ ассистентом уже с коробки. Одним из таких является Coursor AI. В этой статье рассмотрим вайбкодинг поближе и разберемся заменят ли "вайбкодеры" программистов...
Следующая статья
Документы, вакансии и контакты