簡體   English   中英

Pydantic - 如何添加一個不斷更改其名稱的字段?

[英]Pydantic - How to add a field that keeps changing its name?

我正在使用返回包含如下字段的響應的 API:

{
    "0e933a3c-0daa-4a33-92b5-89d38180a142": someValue
}

其中字段名稱是根據請求更改的 UUID(但不包含在實際請求參數中)。 如何在 Python 的數據類中聲明它? 它本質上是str: str ,但這會將鍵解釋為字面上的“str”而不是類型。

我個人覺得最簡單的方法是創建一個自定義的Container數據類。 然后,這會將字典數據拆分,首先是,然后是

這樣做的一個好處是,您可以通過索引值訪問列表,而不是通過隨機 uuid 本身進行搜索,據我了解,這是您根本不會做的事情。 因此,例如,如果您願意,您可以訪問第一個字符串值,如values[0]

這是一個示例實現:

from dataclasses import dataclass


@dataclass(init=False, slots=True)
class MyContainer:

    ids: list[str]
    # can be annotated as `str: str` or however you desire
    values: list[str]

    def __init__(self, input_data: dict):
        self.ids = list(input_data)
        self.values = list(input_data.values())

    def orig_dict(self):
        return dict(zip(self.ids, self.values))


input_dict = {
    "0e933a3c-0daa-4a33-92b5-89d38180a142": "test",
    "25a82f15-abe9-49e2-b039-1fb608c729e0": "hello",
    "f9b7e20d-3d11-4620-9780-4f500fee9d65": "world !!",
}

c = MyContainer(input_dict)
print(c)

assert c.values[0] == 'test'
assert c.values[1] == 'hello'
assert c.values[2] == 'world !!'

assert c.orig_dict() == input_dict

輸出:

MyClass(values=['test', 'hello', 'world !!'], ids=['0e933a3c-0daa-4a33-92b5-89d38180a142', '25a82f15-abe9-49e2-b039-1fb608c729e0', 'f9b7e20d-3d11-4620-9780-4f500fee9d65'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM