pydantic 中是否可以有任意键名?

sec*_*sec 6 python types pydantic

我正在尝试使用模型的任意键名称来模拟与打字稿接口类似的行为pydantic,但遇到了一些问题。

在 TS 中考虑以下内容:

export interface SNSMessageAttributes {
    [name: string]: SNSMessageAttribute;
}
Run Code Online (Sandbox Code Playgroud)

在 pydantic 中可以实现这一点吗?

这是我的Python示例代码:

export interface SNSMessageAttributes {
    [name: string]: SNSMessageAttribute;
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,属性ArbitraryKey可以是任何内容。但我不可能对所有可能的键名称进行硬编码。例如,如果ArbitraryKey键名不是 ,怎么办SomeTestKey

我知道我可以使用extra = 'allowin Config,但这不会给出使用时可以获得的点语法parse_obj_as

我的问题是,如果可能的话,我可以对属性名称执行类似于[name: string]pydantic 的操作吗?

sec*_*sec 9

经过Github的讨论,这正是我所希望的。

from pydantic import BaseModel, parse_obj_as
from typing import Dict, Optional

from pydantic import parse

class Values(BaseModel):
    Value: str
    Type: str


class Mymodel(BaseModel):
    MessageAttributes: Optional[Dict[str, Values]]


data = {"MessageAttributes": {"ArbitraryKey": {"Type": "String", "Value": "TestString"}}}

parsed = Mymodel.parse_obj(data)

print(parsed)
print(parsed.MessageAttributes['ArbitraryKey'].Type)
Run Code Online (Sandbox Code Playgroud)