Подсчёт количества разных уязвимостей для каждого устройства

Храните множество идентификаторов уязвимостей для каждого device_id, а не сумму длин списков. Добавления с разных страниц объединяются, после чего len каждого множества даёт уникальный счётчик.

Короткий ответ

Что ответить на собеседовании

Храните множество идентификаторов уязвимостей для каждого device_id, а не сумму длин списков. Добавления с разных страниц объединяются, после чего len каждого множества даёт уникальный счётчик.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо доработать текущий скрипт, чтобы он выводил количество уникальных уязвимостей, сгруппированных по каждому device_id.


def process_paginated_response(content, res):
    total = 0
    for item in content:
        device_id = item["device_id"]
        vuln_num = len(item["vulnerabilities"])
        res[device_id] += vuln_num
        total += vuln_num
    return total

res = defaultdict(int)
total_ = 0
page_number = 1

while True:
    url = f"{base_url}?page_number={page_number}"
    content_ = requests.get(url, auth=(username, password)).json()
    total_ += process_paginated_response(content_["results"], res)
    if content_["more"] is False:
        break
    page_number += 1

print(json.dumps(dict(res), indent=4))
print(total_)

Ответ

Храните множество идентификаторов уязвимостей для каждого device_id, а не сумму длин списков. Добавления с разных страниц объединяются, после чего len каждого множества даёт уникальный счётчик.

Схема элемента vulnerabilities не показана, поэтому извлечение стабильного CVE/id передаём отдельной функцией:

from collections import defaultdict

seen = defaultdict(set)

def process_page(content, vulnerability_id):
    for item in content:
        device = item['device_id']
        seen[device].update(vulnerability_id(v)
                            for v in item['vulnerabilities'])

# after all pages:
counts = {device: len(ids) for device, ids in seen.items()}
total = sum(counts.values())

Для списка строковых CVE функция может быть lambda value: value. total считает пары «устройство–уязвимость», не уникальные CVE глобально. Пагинации по-прежнему нужны timeout, проверка статуса, структуры ответа и ограничение числа страниц.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее