如何在Python中输入具有常量形式但多种类型的hint Dict?

问题描述 投票:0回答:2

我想输入提示 some_func 函数的返回对象,它始终是相同的格式。这是正确的吗?

from typing import List, Dict


def some_func() -> List[Dict[str, int, str, List[CustomObject]]]:
    my_list = [
               {"ID": 1, "cargo": [CustomObject(), CustomObject()]},
               {"ID": 2, "cargo": [CustomObject(), CustomObject()]},
               {"ID": 2, "cargo": [CustomObject(), CustomObject()]}
               ]
    return my_list
python list python-typing
2个回答
8
投票

您可以使用

TypedDict
来完成此操作:

class MyDict(TypedDict):
    ID: int
    cargo: list[CustomObject]

def some_func()->list[MyDict]:
    pass

类型化字典,请参阅PEP 589是一种为字典中的不同键指定不同类型的方法。

另请注意,从 python 3.10 开始,您可以只使用

list[type]
而不是
typing.List[type]
。也适用于字典和元组。


4
投票

正确键入提示的一种方法如下所示:

from typing import List, Dict, Union

def some_func() -> List[Dict[str, Union[int, List[CustomObject]]]]:
    my_list = [
               {"ID": 1, "cargo": [CustomObject(), CustomObject()]},
               {"ID": 2, "cargo": [CustomObject(), CustomObject()]},
               {"ID": 2, "cargo": [CustomObject(), CustomObject()]}
               ]
    return my_list

简单解释一下,当对字典进行类型注释时,只能有两个参数,第一个是任何给定键的类型,第二个是任何给定值的类型。 由于键始终是字符串,因此我们保留

Dict[str,
并且我们的键可以是整数,也可以是 CustomObject 类型,以表示我们使用
Union
的类型注释中的不同可能性,因此最终我们得到:

Dict[str, Union[int, List[CustomObject]]

一些额外的说明,在 python 3.9 或更高版本中,您可以用内置的

Dict
替换从打字导入的
dict
,在 python 3.10 或更高版本中,联合可以表示为
type | type
,并且您可以替换
List 
内置
list

为了获得更清晰的结果,您可能需要使用 typedDict,总体结果将是:

from typing import TypedDict

class customDict(TypedDict):
    ID: int
    cargo: list[CustomObject]

def some_func() -> list[customDict]:
    my_list = [
               {"ID": 1, "cargo": [CustomObject(), CustomObject()]},
               {"ID": 2, "cargo": [CustomObject(), CustomObject()]},
               {"ID": 2, "cargo": [CustomObject(), CustomObject()]}
               ]
    return my_list

类型化字典的每个属性代表 my_list 中字典的一个键,下面代表与该键相关的值的类型

© www.soinside.com 2019 - 2024. All rights reserved.