欢迎访问宙启技术站
智能推送

使用typing_extensions中的TypedDict()创建类型强大的字典

发布时间:2023-12-16 17:57:39

在Python中,字典是一种非常常用的数据结构,它可以用来存储键值对。然而,Python的字典是动态类型的,这意味着我们可以向字典中添加任意类型的键和值,这在某些情况下可能不是理想的。为了解决这个问题,Python 3.8引入了typing_extensions模块,并提供了一种新的字典类型- TypedDict()。

TypedDict()是Python中的一种字典类型注释,它允许我们在字典定义中指定键和值的类型。与普通字典类型不同,TypedDict()中的每个键都必须在字典的定义中进行注释,以确保键和值的类型与定义一致。

以下是使用TypedDict()创建类型强大的字典的一个简单示例:

from typing_extensions import TypedDict

class Person(TypedDict):
    name: str
    age: int

p: Person = {'name': 'John', 'age': 30}

在上面的示例中,我们使用TypedDict()定义了一个名为Person的字典类型。Person字典包含两个键:name和age,并且指定了它们的值类型分别为str和int。

然后,我们创建了一个名为p的字典,它符合Person类型的定义。这意味着p字典必须同时包含一个名为name且值为str类型的键,以及一个名为age且值为int类型的键。如果试图向p字典中添加其他类型的键或缺少类型不正确的键,Python解释器将会报错。

下面是一个更复杂的示例,展示了如何在TypedDict()中使用嵌套字典类型以及可选键:

from typing_extensions import TypedDict, Literal

class Address(TypedDict):
    street: str
    city: str
    zip_code: int

class Person(TypedDict):
    name: str
    age: int
    address: Address
    job: Literal['teacher', 'engineer']

p: Person = {
    'name': 'John',
    'age': 30,
    'address': {'street': '123 Main St', 'city': 'New York', 'zip_code': 10001},
    'job': 'engineer'
}

在上面的示例中,我们定义了两个TypedDict类型:Address和Person。Address类型表示一个地址字典,包含street、city和zip_code三个键。

Person类型表示一个人的字典,包含name、age和address三个键,并且address键的值类型必须符合Address类型的定义。另外,job键的值必须为'teacher'或'engineer'中的一种。

我们创建了一个名为p的字典,它符合Person类型的定义。p字典的address键的值是一个嵌套的字典,它符合Address类型的定义。

总结来说,TypedDict()提供了一种创建类型强大的字典的方法,可以在字典定义中指定键和值的类型。这样一来,我们就可以确保字典中的键和值的类型与定义一致,减少了类型错误的发生,并提高了代码的可读性和可维护性。