Используйте d.pop(key, None), затем верните d. Второй аргумент подавляет KeyError при отсутствии ключа без if и try/except.
Удаление элемента из словаря без предварительной проверки ключа
Используйте d.pop(key, None), затем верните d. Второй аргумент подавляет KeyError при отсутствии ключа без if и try/except.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Допишите функцию delete, которая удаляет из переданного словаря d элемент с указанным ключом key. При отсутствии такого ключа исключение генерировать нельзя. При решении запрещается использовать условные конструкции if для проверки наличия ключа, а также блоки try/except или утилиту contextlib.suppress.
import json
def delete(d: dict, key: str) -> dict:
"""Deletes a key from a dictionary if it exists.
Args:
d: The dictionary to modify.
key: The key to delete.
Returns:
The modified dictionary.
"""
if key in d:
del d[key]
return d
if __name__ == "__main__":
d_str, k = input().split(';')
d = json.loads(d_str)
print(dict(sorted(delete(d, k).items())))
Ответ
Используйте d.pop(key, None), затем верните d. Второй аргумент подавляет KeyError при отсутствии ключа без if и try/except.
def delete(d: dict, key: str) -> dict:
d.pop(key, None)
return d
Если ключ существует, запись удаляется независимо от её значения. Если ключа нет, словарь остаётся прежним. Возвращается тот же объект, поэтому изменения видны через другие ссылки на него.
Вызов pop(key) без второго аргумента не подходит: отсутствующий ключ вызовет KeyError. Возвращать результат pop тоже неправильно, поскольку он представляет удалённое значение, а условие требует изменённый словарь. Ожидаемая сложность удаления — O(1).