Методы get() и setdefault()

Тренажер по Python для пользователей с начальным уровнем подготовки.

Тренажер по Python

В этом модуле мы погрузимся в методы работы со словарями в Python, которые делают код более безопасным и лаконичным: get() и setdefault().

Обычно обращение к несуществующему ключу словаря вызывает ошибку KeyError. Метод get() позволяет избежать этого, возвращая None или указанное значение по умолчанию. Метод setdefault() идет еще дальше: он не только возвращает значение, но и записывает его в словарь, если ключа еще не было.

Вам предстоит выполнить ряд заданий: от простого заполнения пропусков до исправления логических ошибок и сборки алгоритмов подсчета частоты элементов. Будьте внимательны к тому, изменяет ли метод исходный словарь или только читает данные.

Список тем

1. Безопасное получение значения

id: 40021_task1

Используйте метод get(), чтобы получить значение ключа 'role'. Если ключа нет, верните строку 'guest'. Обратите внимание, что мы не хотим получить ошибку, если ключа не существует.

Заполните пропуски
user_data = {'id': 42, 'name': 'Alex'}
# Получаем роль, если её нет - используем 'guest'
user_role = user_data.input1S('role', input2S)
print(user_role)
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

2. Поведение get при существующем ключе

id: 40021_task2

Проанализируйте код. Мы запрашиваем ключ 'score', который уже есть в словаре, но указываем значение по умолчанию 0. Что выведет print?

Выберите правильный вариант ответа
game_stats = {'score': 100, 'level': 5}
current_score = game_stats.get('score', 0)
print(current_score)
Сообщения
Проверить
Показать подсказку

3. Способы доступа к элементам

id: 40021_task3

Сопоставьте способ обращения к элементу словаря с его поведением при отсутствии ключа.

Сопоставьте строки в правой(нижней) части с соответствующими строками в левой(верхней) по порядковому номеру
Вызывает ошибку KeyError
Возвращает None (или default), не меняя словарь
Возвращает значение и добавляет его в словарь, если ключа нет
data.setdefault('key', 'val')
data['key']
data.get('key')
Сообщения
Проверить
Показать подсказку

4. Как работает setdefault?

id: 40021_task4

Введите число, которое будет выведено на экран. Обратите внимание: ключ 'a' уже существует в словаре. Перезапишет ли его setdefault?

Что должно получиться?
numbers = {'a': 10, 'b': 20}
val = numbers.setdefault('a', 999)
print(val)
Сообщения
Проверить
Показать подсказку

5. Инициализация настройки

id: 40021_task5

Программист хотел установить тему 'dark', если она еще не задана в настройках, и сразу сохранить это в словаре. Однако использованный метод не изменил словарь. Найдите и исправьте метод.

Найдите ошибку и исправьте
config = {'version': 1.0}
# Нужно установить тему по умолчанию, если её нет
theme = config.get('theme', 'dark')
print(config) # Ожидалось {'version': 1.0, 'theme': 'dark'}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Изменяемость словаря

id: 40021_task6

Распределите операции по двум категориям: те, что могут изменить содержимое словаря (добавить пару), и те, которые только читают данные (словарь остается прежним).

Перетяните элементы в соответствующие блоки
Изменяет словарь
Только читает
d['new'] = 5
d.get('new', 5)
x = d['old']
d.setdefault('new', 5)
len(d)
Сообщения
Проверить
Показать подсказку

7. Группировка слов по первой букве

id: 40021_task7

Заполните пропуски, чтобы сгруппировать имена по их первой букве. Используйте setdefault, чтобы создать пустой список для новой буквы, если её еще нет, а затем добавьте имя в этот список.

Нужно правильно расставить в пропуски предложенные варианты
names = ['Anna', 'Alice', 'Bob', 'Bill']
groups = {}

for name in names:
    first_char = name[0]
    groups.input1S(first_char, input2S).input3S(name)

print(groups)
setdefault
get
[]
0
append
add
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

8. Подсчет количества символов

id: 40021_task8

Соберите код, который считает, сколько раз каждый символ встречается в строке text. Используйте метод get для лаконичного увеличения счетчика.

Перетяните в правильном порядке строки из одного блока в другой
text = "banana"
counts = {}
for char in text:
    counts[char] = counts.get(char, 0) + 1
print(counts)
counts.setdefault(char, 0) += 1
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

9. Комбинация методов

id: 40021_task9

Определите, что выведет код. Будьте внимательны: мы создаем ключ методом setdefault, а затем пытаемся прочитать его методом get с другим значением по умолчанию.

Выберите правильный вариант ответа
data = {}
data.setdefault('profit', 100)
data.setdefault('profit', 200)
result = data.get('profit', 0)
print(result)
Сообщения
Проверить
Показать подсказку

Python: запуск кода в браузере

id: 40021_compiler
🐍
Запустить тренажёр (Python)
НайтиКурс.Ру