В этом модуле мы погрузимся в методы работы со словарями в Python, которые делают код более безопасным и лаконичным: get() и setdefault().
Обычно обращение к несуществующему ключу словаря вызывает ошибку KeyError. Метод get() позволяет избежать этого, возвращая None или указанное значение по умолчанию. Метод setdefault() идет еще дальше: он не только возвращает значение, но и записывает его в словарь, если ключа еще не было.
Вам предстоит выполнить ряд заданий: от простого заполнения пропусков до исправления логических ошибок и сборки алгоритмов подсчета частоты элементов. Будьте внимательны к тому, изменяет ли метод исходный словарь или только читает данные.
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
1. Безопасное получение значения
Используйте метод get(), чтобы получить значение ключа 'role'. Если ключа нет, верните строку 'guest'. Обратите внимание, что мы не хотим получить ошибку, если ключа не существует.
user_data = {'id': 42, 'name': 'Alex'}
# Получаем роль, если её нет - используем 'guest'
user_role = user_data.input1S('role', input2S)
print(user_role)2. Поведение get при существующем ключе
Проанализируйте код. Мы запрашиваем ключ 'score', который уже есть в словаре, но указываем значение по умолчанию 0. Что выведет print?
game_stats = {'score': 100, 'level': 5}
current_score = game_stats.get('score', 0)
print(current_score)3. Способы доступа к элементам
Сопоставьте способ обращения к элементу словаря с его поведением при отсутствии ключа.
data.setdefault('key', 'val')data['key']data.get('key')4. Как работает setdefault?
Введите число, которое будет выведено на экран. Обратите внимание: ключ 'a' уже существует в словаре. Перезапишет ли его setdefault?
numbers = {'a': 10, 'b': 20}
val = numbers.setdefault('a', 999)
print(val)5. Инициализация настройки
Программист хотел установить тему 'dark', если она еще не задана в настройках, и сразу сохранить это в словаре. Однако использованный метод не изменил словарь. Найдите и исправьте метод.
config = {'version': 1.0}# Нужно установить тему по умолчанию, если её нетtheme = config.get('theme', 'dark')print(config) # Ожидалось {'version': 1.0, 'theme': 'dark'}6. Изменяемость словаря
Распределите операции по двум категориям: те, что могут изменить содержимое словаря (добавить пару), и те, которые только читают данные (словарь остается прежним).
d['new'] = 5d.get('new', 5)x = d['old']d.setdefault('new', 5)len(d)7. Группировка слов по первой букве
Заполните пропуски, чтобы сгруппировать имена по их первой букве. Используйте setdefault, чтобы создать пустой список для новой буквы, если её еще нет, а затем добавьте имя в этот список.
names = ['Anna', 'Alice', 'Bob', 'Bill']
groups = {}
for name in names:
first_char = name[0]
groups.input1S(first_char, input2S).input3S(name)
print(groups)8. Подсчет количества символов
Соберите код, который считает, сколько раз каждый символ встречается в строке text. Используйте метод get для лаконичного увеличения счетчика.
text = "banana"counts = {}for char in text: counts[char] = counts.get(char, 0) + 1print(counts)counts.setdefault(char, 0) += 19. Комбинация методов
Определите, что выведет код. Будьте внимательны: мы создаем ключ методом setdefault, а затем пытаемся прочитать его методом get с другим значением по умолчанию.
data = {}
data.setdefault('profit', 100)
data.setdefault('profit', 200)
result = data.get('profit', 0)
print(result)