web-dev-qa-db-fra.com

Comment analyser la liste des modèles avec pydantic

J'utilise PyDantic pour modéliser les demandes et les réponses à une API.

J'ai défini un User classe:

from pydantic import BaseModel

class User(BaseModel):
  name: str
  age: int

Mon API renvoie une liste d'utilisateurs que je récupère avec requests et convertissez en dict:

users = [{"name": "user1", "age": 15}, {"name": "user2", "age": 28}]

Comment puis-je convertir ce dict en une liste des instances User?

Ma solution pour l'instant est

user_list = []
for user in users:
  user_list.append(User(**user))
11
Nymous

Vous pouvez envisager d'utiliser une compréhension de la liste avec des dict de déballage au constructeur User

user_list = [
  User(**user) for user in users
]
2
svrist

Vous pouvez utiliser le __root__ Mot-clé Pydantic:

from typing import List
from pydantic import BaseModel

class User(BaseModel):
  name: str
  age: int

class UserList(BaseModel):
  __root__: List[User]     # ⯇-- __root__

Pour construire la réponse JSON:

user1 = {"name": "user1", "age": 15}
user2 = {"name": "user2", "age": 28}

user_list = UserList(__root__=[])
user_list.__root__.append(User(**user1))
user_list.__root__.append(User(**user2))

Votre Frame-Web API peut JSONIFY user_list Pour être retourné comme une matrice JSON (dans le corps de réponse).

1
oHo