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

TypedDict():Python中的新型字典类型

发布时间:2023-12-16 17:53:14

在 Python 3.8 版本中引入了一种新的字典类型 TypedDict,它可以定义字典的键和值的类型。这是一个非常方便的特性,可以用来提高代码的可读性和可靠性。本文将介绍 TypedDict 的用法,并给出一些使用 TypedDict 的例子。

在 Python 中,字典是一种非常常用的数据结构。然而,原生的字典类型对键和值的类型没有严格的限制,这就意味着我们可以随意地向字典中插入任意类型的键和值。这对于一些特定的场景,比如在一些函数中期望接受特定类型的字典作为参数,或者在使用字典类型作为数据结构存储特定类型的对象时,可能会造成问题。

为了解决这个问题,Python 引入了 TypedDict 类型。TypedDict 是一种字典类型,在定义时可以指定字典的键和值的类型。TypedDict 可以通过继承字典类型来实现,也可以通过直接调用 typing 包中的 TypedDict 函数来定义。

下面是一个使用 TypedDict 定义字典类型的例子:

from typing import TypedDict

class Movie(TypedDict):
    title: str
    year: int
    rating: float

在上面的例子中,我们通过继承 TypedDict 类型来定义了一个名为 Movie 的字典类型。这个 Movie 字典类型有三个键值对,分别是 title、year 和 rating。它们的值的类型分别是 str、int 和 float。

有了这个定义,我们就可以使用这个 Movie 字典类型来创建符合指定键和值类型的字典对象了:

movie: Movie = {
    "title": "Inception",
    "year": 2010,
    "rating": 8.8
}

在上面的例子中,我们使用 Movie 类型来声明了一个字典变量 movie。然后,我们给这个字典变量赋值一个符合 Movie 类型要求的字典。由于我们在定义 Movie 类型时指定了键和值的类型,因此 Python 会在编译时检查我们给字典变量赋值的字典是否符合定义的类型。

如果我们给字典变量赋值的字典不符合定义的类型,Python 会在编译时抛出一个类型错误:

movie: Movie = {
    "title": "Inception",
    "year": 2010,
    "rating": "8.8"       # 这里的 rating 应该是 float 类型,但赋值了一个 str 类型的值
}

上面的代码会抛出一个类型错误,提示我们 rating 的类型不正确。

在使用 TypedDict 定义字典类型时,还可以使用 Optional 类型来表示键的可选性。下面是一个使用 TypedDict 定义字典类型的例子:

from typing import TypedDict, Optional

class Person(TypedDict):
    name: str
    age: Optional[int]
    email: Optional[str]

在上面的例子中,我们定义了一个名为 Person 的字典类型,它有三个键值对。其中,name 的值是必需的,并且类型是 str;age 和 email 的值是可选的,并且类型分别是 int 和 str。

有了这个定义,我们就可以创建符合指定键和值类型的字典对象了:

person: Person = {
    "name": "Alice",
    "age": 25,
    "email": "alice@example.com"
}

上面的例子中,我们给字典变量 person 赋值一个符合 Person 类型要求的字典。由于 age 和 email 是可选的,因此我们可以选择不给它们赋值。

总结一下,TypedDict 是 Python 3.8 引入的一种新的字典类型,可以在定义字典类型时指定键和值的类型。使用 TypedDict 可以提高代码的可读性和可靠性,避免在使用字典时出现类型错误。在定义 TypedDict 时,还可以使用 Optional 类型来表示键的可选性。在使用 TypedDict 定义字典类型时,可以通过继承 TypedDict 类型或者调用 typing 包中的 TypedDict 函数来实现。