递归检查dict和列表项类型的有效性和要求

时间:2015-06-24 13:29:52

标签: python list dictionary types

注意:找到这个问题的更精确的名称

会很棒

最近,我不得不制作一个验证字典结构的脚本。此字典结构可以由内部的一些其他列表或字典结构组成,或者具有任何值的基本类型(dictliststrint)。有些键是必需的,有些是可选的。这是一个例子:

dictionary = {
    "key1" : required({
        "key1.1": optional([
            required(int),
            required(str),
            optional(str),
            required(int)
            ]),
        "key1.2": required(int)
        }),
    "key2" : optional(int),
    "key3" : required([
            optional(int),
            optional(str),
            required(int)
            ]),
    "key4" : optional(dict),  # Dictionary of any kind allowed
    }

以下是有效/无效字典的一些示例

# valid
d1 = {"key1": {"key1.2": 3}, "key2": 42, "key3": ["toto", 42]}

# invalid (because of the order in the list of d["key3"])
d2 = {"key1": {"key1.2": 3}, "key2": 42, "key3": [42, "toto"]}

# valid
d3 = {"key1": {"key1.2": 3, "key1.1": [3, "toto", 12]}, "key3": [42]}

# invalid (because of invalid type of d["key2"]
d4 = {"key1": {"key1.2": 3}, "key2": "bad type", "key3": [42]}

# invalid (missing d["key1"] required)
d5 = {"key3": [42]}

# valid (any kind of dictionary is allowed in key4)
d6 = {"key1": {"key1.2": 42}, "key3": [42], "key4": {}}

# valid (any kind of dictionary is allowed in key4)
d7 = {"key1": {"key1.2": 42}, "key3": [42], "key4": {"poney": "amazing"}}

我对requiredoptional的实现只返回一个带有布尔值的元组,指示该项是否是必需的。它可以修改。

def required(entity):
    return (True, entity)

def optional(entity):
    return (False, entity)

目标:制作一个函数,将字典作为参数进行检查(d1d2d3 ...)和验证器({ {1}}),并返回一个布尔值,指示字典是否有效。

我制作了一个验证字典结构的脚本的一部分,但它很长并且没有验证列表结构(如dictionary,我坚持认为)。我可以在这里发布,但我觉得它只会对这个话题进行评论......

0 个答案:

没有答案