Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:验证字典中的每个值_Python_Validation_Dictionary - Fatal编程技术网

Python:验证字典中的每个值

Python:验证字典中的每个值,python,validation,dictionary,Python,Validation,Dictionary,在不使用任何外部库的情况下,验证字典中每个值的最佳方法是什么 for example dict = {"A":"some_string", "B":12, "C":83, "D":56.......so on} 我必须验证,如果键是A,那么值应该是string,并且 如果键为B,则值应为int,范围为1到20 如果键为C,则值应为int,范围为1到100 因此,根据键,值的验

在不使用任何外部库的情况下,验证字典中每个值的最佳方法是什么

for example dict = {"A":"some_string",
                    "B":12,
                    "C":83,
                    "D":56.......so on}
我必须验证,如果键是
A
,那么值应该是
string
,并且 如果键为
B
,则值应为
int
,范围为
1到20
如果键为
C
,则值应为
int
,范围为1到100 因此,根据键,值的验证也会有所不同


有没有更短的方法?我的字典非常大

假设您在字典中定义了预期的类型:

typeExpected = {'A':str, 'B':int}
d = {"A":"some_string",
     "B":12,
     "C":83,
     "D":56}

# Map your validation functions to the keys
validations = {
    "A": lambda x: isinstance(x, str),
    "B": lambda x: isinstance(x, int) and 1 <= x <= 20,
    "C": lambda x: isinstance(x, int) and 1 <= x <= 100,
}

for k, v in d.items():
    print(validations.get(k, lambda x: False)(v))  # Default validation just returns False (invalid)
这意味着键A应该包含
字符串
,键B应该包含
int
。让我们将要测试的字典定义为:

exampleData = {'A':'ok', 'B':0}
现在,您可以通过运行以下命令来验证类型的正确性:

map(lambda x: type(exampleData[x]) == typeExpected[x], exampleData)

在您的数据上尝试此操作,如果您的字典确实太大,则很容易将map转换为pool.map以在多处理中工作。

以下是另一个字典的方法:

typeExpected = {'A':str, 'B':int}
d = {"A":"some_string",
     "B":12,
     "C":83,
     "D":56}

# Map your validation functions to the keys
validations = {
    "A": lambda x: isinstance(x, str),
    "B": lambda x: isinstance(x, int) and 1 <= x <= 20,
    "C": lambda x: isinstance(x, int) and 1 <= x <= 100,
}

for k, v in d.items():
    print(validations.get(k, lambda x: False)(v))  # Default validation just returns False (invalid)

有多少把钥匙?在相应的价值要求之间有什么模式吗?这些规则是从哪里产生的?如果没有这一点,这就不是一个很好定义的问题。创建另一个字典,其中键映射到验证函数,并使用类似于
validations[key](value)