如何从嵌套的 pydantic 类 中获取值?
How to get values from nested pydantic classes?
class mail(BaseModel):
mailid: int
email: str
class User(BaseModel):
id: int
name: str
mails: List[mail]
data = {
'id': 123,
'name': 'Jane Doe',
'mails':[
{'mailid':1,'email':'aeajhs@gmail.com'},
{'mailid':2,'email':'aeajhsds@gmail.com'}
]
}
userobj = User(**data)
如何从mail
class中获取email
在mail
class或mailid
中的值?
当我尝试使用 print(mail.email)
时,它会抛出错误
AttributeError: type object 'mail' has no attribute 'email'
我用这个的时候也报错
print(userobj.mails.email)
AttributeError: 'list' object has no attribute 'email'
当我使用它时,我得到的数据如下
print(userobj.mails)
[mail(mailid=1, email='aeajhs@gmail.com'), mail(mailid=2, email='aeajhsds@gmail.com')]
我想要的输出必须是当我想打印电子邮件时我必须得到 'aeajhs@gmail.com','aeajhsds@gmail.com'
错误
AttributeError: 'list' object has no attribute 'email'
表示您正在访问 mails
列表的属性,而不是 mail
对象。
您应该首先使用索引从列表中选择对象:
print(userobj.mails[0].email)
而且,如果您想要每个 mails
实例的每封电子邮件,请执行
print([mail.email for mail in userobj.mails])
您似乎正在尝试访问 class 而不是实例。
这是一种方法:
from pydantic import BaseModel
from typing import List
class Mail(BaseModel):
mailid: int
email: str
one_mail = {"mailid": 1, "email": "aeajhs@gmail.com"}
mail = Mail(**one_mail)
print(mail)
# mailid=1 email='aeajhs@gmail.com'
有了这些,让我们调整 User
模型:
class User(BaseModel):
id: int
name: str
mails: List[Mail]
data = {
"id": 123,
"name": "Jane Doe",
"mails":[
{"mailid": 1, "email": "aeajhs@gmail.com"},
{"mailid": 2, "email": "aeajhsds@gmail.com"}
]
}
userobj = User(**data)
print(userobj.mails)
# [Mail(mailid=1, email='aeajhs@gmail.com'), Mail(mailid=2, email='aeajhsds@gmail.com')]
如果您只需要其中一个电子邮件地址,您需要指定是哪一个,例如:
print(userobj.mails[0].email)
# aeajhs@gmail.com
为了获得所有电子邮件地址的列表,您需要遍历 mails
,例如:
print([mail.email for mail in userobj.mails])
# ['aeajhs@gmail.com', 'aeajhsds@gmail.com']
附带说明:Pydantic 支持 email string validation。
class mail(BaseModel):
mailid: int
email: str
class User(BaseModel):
id: int
name: str
mails: List[mail]
data = {
'id': 123,
'name': 'Jane Doe',
'mails':[
{'mailid':1,'email':'aeajhs@gmail.com'},
{'mailid':2,'email':'aeajhsds@gmail.com'}
]
}
userobj = User(**data)
如何从mail
class中获取email
在mail
class或mailid
中的值?
当我尝试使用 print(mail.email)
时,它会抛出错误
AttributeError: type object 'mail' has no attribute 'email'
我用这个的时候也报错
print(userobj.mails.email)
AttributeError: 'list' object has no attribute 'email'
当我使用它时,我得到的数据如下
print(userobj.mails)
[mail(mailid=1, email='aeajhs@gmail.com'), mail(mailid=2, email='aeajhsds@gmail.com')]
我想要的输出必须是当我想打印电子邮件时我必须得到 'aeajhs@gmail.com','aeajhsds@gmail.com'
错误
AttributeError: 'list' object has no attribute 'email'
表示您正在访问 mails
列表的属性,而不是 mail
对象。
您应该首先使用索引从列表中选择对象:
print(userobj.mails[0].email)
而且,如果您想要每个 mails
实例的每封电子邮件,请执行
print([mail.email for mail in userobj.mails])
您似乎正在尝试访问 class 而不是实例。
这是一种方法:
from pydantic import BaseModel
from typing import List
class Mail(BaseModel):
mailid: int
email: str
one_mail = {"mailid": 1, "email": "aeajhs@gmail.com"}
mail = Mail(**one_mail)
print(mail)
# mailid=1 email='aeajhs@gmail.com'
有了这些,让我们调整 User
模型:
class User(BaseModel):
id: int
name: str
mails: List[Mail]
data = {
"id": 123,
"name": "Jane Doe",
"mails":[
{"mailid": 1, "email": "aeajhs@gmail.com"},
{"mailid": 2, "email": "aeajhsds@gmail.com"}
]
}
userobj = User(**data)
print(userobj.mails)
# [Mail(mailid=1, email='aeajhs@gmail.com'), Mail(mailid=2, email='aeajhsds@gmail.com')]
如果您只需要其中一个电子邮件地址,您需要指定是哪一个,例如:
print(userobj.mails[0].email)
# aeajhs@gmail.com
为了获得所有电子邮件地址的列表,您需要遍历 mails
,例如:
print([mail.email for mail in userobj.mails])
# ['aeajhs@gmail.com', 'aeajhsds@gmail.com']
附带说明:Pydantic 支持 email string validation。