有没有一种方法可以使用Python类符号来定义嵌套字典类型?

时间:2020-05-29 19:03:27

标签: python-3.x python-3.8 python-typing

所以我正在研究如何键入从设备返回的大型JSON对象。我在Python 3.8中找到了TypedDict类型,并认为它很酷。

但是后来我开始钻研嵌套词典的兔子洞,不确定是否有更好的方法。

问题:有没有一种使用类符号定义嵌套类型的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})})

关于改进上述语法的任何建议吗?

0 个答案:

没有答案