注意:找到这个问题的更精确的名称
会很棒最近,我不得不制作一个验证字典结构的脚本。此字典结构可以由内部的一些其他列表或字典结构组成,或者具有任何值的基本类型(dict
,list
,str
和int
)。有些键是必需的,有些是可选的。这是一个例子:
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"}}
我对required
和optional
的实现只返回一个带有布尔值的元组,指示该项是否是必需的。它可以修改。
def required(entity):
return (True, entity)
def optional(entity):
return (False, entity)
目标:制作一个函数,将字典作为参数进行检查(d1
,d2
,d3
...)和验证器({ {1}}),并返回一个布尔值,指示字典是否有效。
我制作了一个验证字典结构的脚本的一部分,但它很长并且没有验证列表结构(如dictionary
,我坚持认为)。我可以在这里发布,但我觉得它只会对这个话题进行评论......