Python:验证字典

时间:2016-03-23 06:05:33

标签: python validation dictionary

什么是使用任何外部库验证字典中每个值的最佳方法

for example dict = {"A":"some_string",
                    "B":12,
                    "C":83,
                    "D":56.......so on}

我必须验证,如果密钥为A,则值应为string和 如果密钥为B,则值应为int,范围为1 to 20 如果密钥为C,则值应为int,范围为1到100 因此,基于密钥,值的验证也会有所不同......

任何更短的方式吗?我的字典大小很大

2 个答案:

答案 0 :(得分:4)

这是另一种词典的方法:

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)

要检查词典是否有效,您可以使用:

print(all(validations.get(k, lambda x: False)(v) for (k, v) in d.items()))

答案 1 :(得分:0)

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

typeExpected = {'A':str, 'B':int}

表示密钥A应包含string,密钥B应包含int。让我们将您要测试的字典定义为:

exampleData = {'A':'ok', 'B':0}

现在您可以通过运行来验证类型的正确性:

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

在您的数据上尝试这一点,如果您的字典确实太大,那么将地图转换为pool.map以便在多处理中工作会很容易。