Используйте first_dict.setdefault(key, value): метод добавляет значение только при отсутствии ключа. Существующее значение, даже None или 0, останется неизменным.
Создание функции merge_dicts без явной проверки наличия ключа
Используйте first_dict.setdefault(key, value): метод добавляет значение только при отсутствии ключа. Существующее значение, даже None или 0, останется неизменным.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Напишите функцию merge_dicts, которая объединяет два словаря: в первый словарь добавляются все пары ключ‑значение из второго, но только в том случае, если соответствующего ключа ещё нет в первом. При реализации не рекомендуется использовать оператор if для проверки присутствия ключа.
import json
def merge_dicts(first_dict: dict, second_dict: dict) -> dict:
for key, value in second_dict.items():
first_dict[key] = value
return first_dict
if __name__ == "__main__":
first_str, second_str = input().split(';')
first_dict = json.loads(first_str)
second_dict = json.loads(second_str)
print(dict(sorted(merge_dicts(first_dict, second_dict).items())))
Ввод представляет собой две JSON‑строки, разделённые точкой с запятой. Программа должна вывести полученный словарь, отсортированный по ключам.
Ответ
Используйте first_dict.setdefault(key, value): метод добавляет значение только при отсутствии ключа. Существующее значение, даже None или 0, останется неизменным.
Исправленная функция изменяет первый словарь и возвращает его:
def merge_dicts(first_dict, second_dict):
for key, value in second_dict.items():
first_dict.setdefault(key, value)
return first_dict
Оператор if не требуется. Обычный update или присваивание first_dict[key] = value перезаписали бы совпадающие ключи, что противоречит условию. json.loads нужно проверять на получение объектов-словарей; простой split(';') также не является надёжным форматом для произвольного JSON, если точка с запятой может встретиться внутри строки.