Коллекции стандартной библиотеки: deque, Counter, defaultdict и ChainMap
Содержание курса
0 / 1 баллов
Обратный индекс вызовов
Сервисы в системе постоянно обращаются к внешним ресурсам: базам данных, очередям сообщений и кэшам. Журнал вызовов хранит пары «вызывающий сервис — целевой ресурс». Чтобы оценить зависимость системы от конкретных хранилищ, нужно составить обратную карту: для каждого ресурса собрать список всех сервисов, которые к нему обращаются.
Что уже дано
Готовый скрипт считывает входную строку JSON через sys.stdin.read(), вызывает функцию build_reverse_index и выводит результат в формате JSON в sys.stdout.
Что нужно сделать
Напишите тело функции build_reverse_index(calls: list[list[str]]) -> dict[str, list[str]].
Функция принимает список calls, элементами которого являются списки из двух строк вида [service_name, target_resource], где service_name — имя вызывающего сервиса, а target_resource — имя целевого ресурса.
Правила формирования результата:
- Ключами возвращаемого словаря должны стать все целевые ресурсы, упомянутые в
calls, и только они. - Значением для каждого ресурса должен быть список уникальных имён сервисов, обращавшихся к нему.
- Имена сервисов в списке для каждого ресурса должны быть отсортированы по возрастанию (лексикографически).
- Повторные обращения одного и того же сервиса к ресурсу не должны дублироваться в итоговом списке.
- Порядок пар во входных данных не должен влиять на состав и сортировку итогового списка сервисов.
- Если список
callsпуст, функция должна вернуть пустой словарь{}.
Ввод и вывод
Программа взаимодействует с окружением через стандартные потоки stdin и stdout.
Формат ввода
В стандартный ввод передаётся JSON-массив пар строк вида [[service, resource], ...]. Если передан пустой список, на вход поступает валидный JSON вида [].
Формат вывода
В стандартный вывод выводится одна JSON-строка со словарём вида {"resource": ["caller", ...], ...}, ключи которого упорядочены по возрастанию.
О данных в ответах
Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.
- Тест 1Ввод
[["auth", "postgres-main"], ["orders", "postgres-main"], ["auth", "redis-cache"], ["orders", "kafka-events"], ["auth", "postgres-main"]]
Ожидаемый вывод{"kafka-events":["orders"],"postgres-main":["auth","orders"],"redis-cache":["auth"]}
Как проверяется решение
Сравнение вывода: Правила исходной проверяющей системы. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.
Отправьте решение, чтобы увидеть результаты тестов.
