Итак, я изучаю, как набирать большие JSON объекты, которые я получаю с устройств. Я нашел тип TypedDict
в Python 3.8 и считаю, что это довольно круто.
Но затем я начал копаться в кроличьей норе вложенных словарей и не был уверен, есть ли лучший способ.
Вопрос: есть ли способ определить вложенные типизированные словари Dicts с использованием обозначения классов?
У меня есть следующий словарь
object = {
'name': 'My Name',
'somekey': {
'subkey1': 1,
'subkey2': {
'subsubkey1': 2,
'subsubkey2': 'nested'
}
}
}
Я импортирую следующую библиотеку from typing import TypedDict
Используя аннотацию присваивания, я смог придумать это, но это уродливо и трудно читать.
MyObjAssignmentNotation = TypedDict('Obj', {'name': str, 'somekey': TypedDict('SubObj_1', {'subkey1': int, 'subkey2': TypedDict(
'SubObj_2', {'subsubkey1': int, 'subsubkey2': str})})}
Используя обозначение класса, я придумал это, но все типы разделены и непросто понять, каким должен быть комбинированный шрифт, так как читать нужно снизу вверх.
class SubObj_Layer2(TypedDict):
subsubkey1: int
subsubkey2: str
class SubObj_Layer1(TypedDict):
subkey1: int
subkey2: SubObj_Layer2
class MyObjClassNotation(TypedDict):
name: str
somekey: SubObj_Layer1
Затем я проявил немного творчества и сложил их вместе, и это немного лучше, но не намного .
class MyObjClassAndAssignmentNotation(TypedDict):
name: str
somekey: TypedDict('SubObj_1', {'subkey1': int, 'subkey2': TypedDict(
'SubObj_2', {'subsubkey1': int, 'subsubkey2': str})})
Есть предложения по улучшению синтаксиса выше?