gpt4 book ai didi

python - 验证输入字典模式

转载 作者:行者123 更新时间:2023-12-02 02:58:59 26 4
gpt4 key购买 nike

我有一个Python输入字典的模式,如下所示,

SCHEMA = {
'mode': ('mode_1', 'mode_2', 'mode_3'),
'method': ('method_1', 'method_2'),
'other': {
'x1': [1, 365],
'x2': [0., 1.0]
}

}

我想验证给定的输入字典,

inp = {
'mode': 'mode_1',
'method': 'method_1',
'other': {
'x1': 1,
'x2': 1.0
}

}
  1. 包含相同的键
  2. 如果任何值是字典,请检查字典是否也具有相同的键
  3. 检查输入字典的值是否在架构范围内。例如,对于键“mode”,输入字典应具有来自 ('mode_1', 'mode_2', 'mode_3') 的值。对于所有键值对也是如此。
  4. 如果 SCHEMA 中值的类型是列表,我还想检查输入字典中的对应值是否大于 value[0] 且小于 value[1]

我可以考虑用循环来做。但想不出一个通用的方法来做到这一点。如果我只是循环两个字典并比较值,那么如果架构发生变化,我必须重写逻辑。

是否有任何直接的方法来验证架构?

最佳答案

您可以尝试这个递归函数:

def validate(input_, db): 
for k,v in input_.items():
if isinstance(v, dict):
return validate(v, db.get(k))
else:
if v not in db.get(k):
return False
return True

然后你调用它:

In [21]: validate(inp, SCHEMA)                                                                                                                                                                                     
Out[21]: True

如果您将 inp 更改为:

In [16]: inp = { 
...: 'mode': 'mode_2',
...: 'method': 'method_2',
...: 'other': {
...: 'x1': 4, # This is not valid
...: 'x2': 1.0
...: }
...:
...: }

In [17]: validate(inp, SCHEMA)
Out[17]: False

In [20]: inp = { 
...: 'mode': 'mode_2',
...: 'method': 'method_2',
...: 'other': {
...: 'x1': 1,
...: 'x2': 1.0
...: }
...:
...: }
In [21]: validate(inp, SCHEMA)
Out[21]: True

关于python - 验证输入字典模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60427443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com