ChainMap в Python: исправьте приоритет настроек и удаление переопределений
Напишите решение на Python и проверьте его на странице.
Другие упражнения по этой теме: Collections в Python: задачи на ChainMap, defaultdict и deque.
Многослойная конфигурация шага
В пайплайнах обработки данных конфигурация формируется послойно: базовые настройки перекрываются переменными окружения, а поверх них накладываются параметры текущего шага выполнения. В процессе работы шаг может динамически задавать новые значения параметров или сбрасывать свои локальные переопределения, возвращаясь к значениям из окружения или базы.
Что уже дано
В предоставленном скрипте уже реализованы разбор JSON из стандартного ввода и печать результата, но функция apply_mutations содержит ошибки в порядке слоёв и логике удаления переопределений.
Что нужно сделать
Исправьте функцию apply_mutations(base_cfg, env_cfg, step_cfg, operations) -> dict.
Функция принимает четыре аргумента:
base_cfg— словарь базовых настроек;env_cfg— словарь настроек окружения;step_cfg— словарь начальных настроек активного шага;operations— список операций, применяемых строго по порядку.
Каждая операция представляет собой словарь с полем "op":
{"op": "set", "key": str, "value": any}— устанавливает или перезаписывает значение ключа в активном слое шага.{"op": "reset", "key": str}— удаляет ключ исключительно из активного слоя шага. Если ключа не было в настройках шага, операция безопасно игнорируется (ошибки возникать не должно, даже если ключ есть в окружении или базе).
Правила формирования результата:
- Операции мутации затрагивают только активный слой шага. Исходные значения
env_cfgиbase_cfgостаются неизменными и служат неизменяемыми слоями подстановки. - Значения
null,falseи0считаются существующими значениями, а не признаком отсутствия ключа. - Итоговая конфигурация ключей разрешается по строгому приоритету: активные настройки шага исходные настройки окружения
env_cfgисходные базовые настройкиbase_cfg. Если ключ отсутствует во всех трёх слоях, он не должен присутствовать в итоговой конфигурации. - Начальные настройки
step_cfgучаствуют в поиске значений с наивысшим приоритетом даже при пустом списке операцийoperations.
Функция должна вернуть словарь ровно с двумя ключами:
"resolved_config"— словарь всех видимых ключей с их итоговыми значениями согласно приоритету слоёв;"step_overrides"— словарь итоговых настроек активного слоя шага со всеми применёнными операциями.
Ввод и вывод
Программа взаимодействует с внешним окружением через стандартные потоки stdin и stdout.
Формат ввода
В stdin передаётся единая JSON-строка — объект с четырьмя ключами: "base", "env", "step" (словари произвольных значений) и "operations" (список операций set и reset).
Формат вывода
В stdout выводится одна JSON-строка с ключами "resolved_config" и "step_overrides", отсортированными по алфавиту и с компактными разделителями.
Пример
- Ввод
{"base":{"host":"127.0.0.1","port":8080,"retries":3},"env":{"port":9000,"debug":true},"step":{"retries":5},"operations":[{"op":"set","key":"threads","value":8},{"op":"reset","key":"retries"},{"op":"reset","key":"debug"}]}- Вывод
{"resolved_config":{"debug":true,"host":"127.0.0.1","port":9000,"retries":3,"threads":8},"step_overrides":{"threads":8}}
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Удаление ключа из ChainMap в Python: проверка поведения del
- Обратный индекс на Python: группировка уникальных значений через defaultdict
- Подсчёт дефицита ресурсов в Python: квоты и суммы заявок
- Иерархия конфигурации в Python: изоляция настроек разных клиентов
- Скользящее окно Python: найдите кратчайшую подстроку с тремя символами
- Объединение команд и подсчёт рейтинга на Python
