使用typing_extensions中的TypedDict()创建类型强大的字典
在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()提供了一种创建类型强大的字典的方法,可以在字典定义中指定键和值的类型。这样一来,我们就可以确保字典中的键和值的类型与定义一致,减少了类型错误的发生,并提高了代码的可读性和可维护性。
