Проверка типа значения вложенного словаря - PullRequest
1 голос
/ 13 марта 2020

Я проверяю данные python в зефире, поле food представляет собой список, и в этом списке хранится информация. Я могу сделать только этот шаг. На самом деле я хочу убедиться, что значение в 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)

Ответы [ 3 ]

1 голос
/ 13 марта 2020

Код ниже должен проверить ваш шаблон данных.
Посмотрите на комментарии в коде, это простое объяснение.

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"]}}
0 голосов
/ 13 марта 2020

попробуйте выполнить итерацию и проверить каждый тип значения следующим образом

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)
0 голосов
/ 13 марта 2020

Проверьте этот код в вашей функции:

print(type(var_name)) 
...