Храните множество идентификаторов уязвимостей для каждого 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, проверка статуса, структуры ответа и ограничение числа страниц.