Бывает так, что не ставят в null, а просто отсутствует ключ, и вот здесь кроется проблема. Вроде бы хочется точно сказать, вот этот key вот тут optional, а нельзя, только всю структуру тоталить (если оно на первом уровне)
С аннотациями сложных структур на базе словаря все не так просто, пока есть официально поддерживаемое mypy решение TypedDict (https://mypy.readthedocs.io/en/latest/more_types.html#typeddict), однако это еще не в стандарте, кроме того, там с Optional не все просто — нельзя сказать что конкретного элемента может не быть, только всей структуре указать, что допускается отсутствие ключей
total=False
Ну и сам он не то, чтобы очень удобен в эксплуатация — каждый вложенный словарь тоже должен объявляться отдельно как TypedDict
И еще, есть такое расширение для Chrome и Firefox, называется Mailvelope, создано для удобного шифрования и подписывания сообщений электронной почты, но, по функциональности, может использоваться для создания ключей, публикации на public keyservers, может зашифровать/расшифровать произвольный текст/файлы (есть какое-то ограничение на объем, видимо, не все может браузер «переварить»), ну и добавляет в инпуты для почтовых сервисов возможность шифровать/расшифровывать прямо там (для популярных типа GMail есть готовые настройки, для менее популярных можно самому настроить, какие textarea смотреть)
В этом-то то и весь смысл Clean Room Reverse Egineering. Если потом будет обнаружено, что кто-то посмотрел как сделать «что-то правильно», вместо «мучительного реверсинга» — у проекта будут очень большие проблемы.
Ну и сам он не то, чтобы очень удобен в эксплуатация — каждый вложенный словарь тоже должен объявляться отдельно как TypedDict
А про расширение и алгоритм, рекомендую почитать www.laurentluce.com/posts/python-list-implementation