gpt4 book ai didi

python - 嵌套字典的类型提示

转载 作者:行者123 更新时间:2023-12-03 09:36:55 25 4
gpt4 key购买 nike

我在 Python 脚本中解析的数据结构类型是一个 json 文件,在 json.load(file_handle) 之后, 类型为 <class 'dict'> .到现在为止还挺好。现在对于使用它作为输入参数的函数,我想要解析的 json 的类型提示。我读了 typing documentation ,对于 dict s 作为参数,我应该使用 Mapping[key_type, value_type] :

from typing import Mapping

def foo(json_data: Mapping[str, str]) -> None:
...
我解析的 json 有 str -type 键和 str -type 值,但通常情况下,它的结构是高度递归的。因此,值更有可能是 dictstr key ,甚至这样的 dict s 作为值。它是非常嵌套的,直到在最深的层次上,最后一个 dict 终于有了 str键和 str值。
那么我如何更精确地表示这个数据结构呢?我在想一些事情,比如 this question ,它可能是:
Union[Mapping[str, str], Mapping[str, Mapping]]
但它似乎只代表一级递归。有没有更好的方法来提示这个?

最佳答案

简单的字典
您可以简单地使用 Mapping[K, V]作为另一个 Mapping 的值.假设您的 json 如下所示:

{
"person_1": {"money": 1000},
"person_2": {"money": 1000}
}
在这种情况下,您可以使用如下所示的类型提示:
Mapping[str, Mapping[str, int]]
更难的字典
但是假设您有一些更复杂的东西,例如:
{
"person_1": {
"money": 1000,
"job": "coder",
}
}
你怎么能输入提示呢?您可以使用 Union (来自 typing )做这样的事情:
Mapping[str, Mapping[str, Union[str, int]]]
但是现在我们会遇到像 mypy 这样的工具的问题,认为 our_dict["person_1"]["job"]有类型 Union[str, int]好吧,这并没有错,毕竟这是我们告诉它的。在这里可以提供帮助的是 TypedDict来自 typing_extensions .
from typing_extensions import TypedDict

class Person(TypedDict):
money: int
job: str

# type hint you would use in your function:
Mapping[str, Person]
注意:在 python 中 3.8 TypedDicttyping 的一部分

关于python - 嵌套字典的类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58400724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com