Python 性感:在dicts中验证dicts

Python 性感:在dicts中验证dicts,python,validation,dictionary,voluptuous,Python,Validation,Dictionary,Voluptuous,我想验证以下YAML文件定义的defaultdict包含两个名为dev和sha的dict 使用yaml.load safe_load会导致创建构造函数的一个完全不同的问题,所以让我们把它放在一边。给我这个数据结构: defaultdict(<class 'dict'>, {'dev': {'sha': '5b7', 'url': '/path/to/here'}, 'shared': {'sha': '58a', 'url

我想验证以下YAML文件定义的defaultdict包含两个名为dev和sha的dict

使用yaml.load safe_load会导致创建构造函数的一个完全不同的问题,所以让我们把它放在一边。给我这个数据结构:

 defaultdict(<class 'dict'>, {'dev': {'sha': '5b7', 'url': '/path/to/here'}, 
                             'shared': {'sha': '58a', 'url': '/path/to/there'}})
这成功地验证了我有一个defaultdict包含两个dict。我想验证这两个dict中的sha和url标记是否真的是str,稍后可能会进行更多验证

我可以创建一个额外的模式

 new_schema = Schema({'sha':str, 'url':str})
 new_schema(my_data['dev'])
 new_schema(my_data['shared'])

但是有没有更优雅的方法呢?

一个答案是将新的\u模式放入快照\u模式中:

我想你也可以这样做:

snapshot_schema=Schema({"dictitems":dict,   "dev":{"sha":str,"url":str},
                                         "shared":{"sha":str,"url":str})
 new_schema = Schema({'sha':str, 'url':str})
 new_schema(my_data['dev'])
 new_schema(my_data['shared'])
   repo_schema = Schema({"sha":str,"url":str})
   snapshot_schema = Schema({"dictitems":dict,"dev":repo_schema,
                                                  "shared":repo_schema})
snapshot_schema=Schema({"dictitems":dict,   "dev":{"sha":str,"url":str},
                                         "shared":{"sha":str,"url":str})