验证嵌套字典的值类型

2024-04-23 20:18:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我在marshmallow中检查python数据,food字段是一个列表,该列表存储dict。事实上,我想验证dict中的值是否为int,而不是string。我应该如何修改我的代码

from marshmallow import Schema, fields, pprint

class UserSchema(Schema):
    name = fields.Str()
    food = fields.List(fields.Dict)

user_data = {
    "name": "Ken",
    "food": [{'apple': 2, 'banana': 4}, {'apple': '2', 'banana': '4'}]
}

result = UserSchema().load(user_data)
pprint(result)

Tags: 数据nameapplefields列表datafoodschema
3条回答

下面的代码应该验证您的数据模式。
看看代码中的注释,这是简单的解释

from marshmallow import ValidationError, Schema, fields, pprint # Added `ValidationError`.

user_data = {
    "name": "Ken",
    "food": [
        {'apple': 2, 'banana': 4}, 
        {'apple': '2', 'banana': '4'}
    ]
} # `user_data` is as is without changes.

# New function for validation your dictionary.
def validate_value_type(dict):
    for key in dict:
        if type(dict[key]) is not int:
            raise ValidationError(f'Type of {key}\'s value is not Integer')

# `UserSchema` class with changes.
class UserSchema(Schema):
    name = fields.Str()
    food = fields.List(fields.Dict(validate=validate_value_type)) # Added validation function.

# Wrapped `load` in `try/catch`.
try:
    UserSchema().load(user_data)
except ValidationError as err:
    pprint(err.messages)

以上代码输出:

{'food': {1: ["Type of apple's value is not Integer"]}}

尝试像这样迭代并检查每个值类型

DictList = [{'apple': 2, 'banana': 4}, {'apple': '2', 'banana': '4'}]

user_data = {
    "name": "Ken",
    "food": DictList
}



def verify():
    for i in DictList:
        for k in i:
            if type(i[k]) == int:
                return True
            return False




if verify():
    result = UserSchema().load(user_data)
    pprint(result)

在函数中检查此代码:

print(type(var_name)) 

相关问题 更多 >