Python 根据yaml配置验证对象值

Python 根据yaml配置验证对象值,python,configuration,yaml,Python,Configuration,Yaml,我有一个应用程序,其中一个嵌套的Python字典是基于一个JSON文档创建的,作为API的响应。例如: colleagues = [ { "name": "John", "skills": ["python", "java", "scala"], "job": "developer" }, { "name": "George", "skills": ["c", "go", "nodejs"], "job": "developer" }] 此字典可以有更多嵌套级别。

我有一个应用程序,其中一个嵌套的Python字典是基于一个JSON文档创建的,作为API的响应。例如:

colleagues = [
{  "name": "John",
   "skills": ["python", "java", "scala"],
   "job": "developer"
},
{  "name": "George",
   "skills": ["c", "go", "nodejs"],
   "job": "developer"
}]
此字典可以有更多嵌套级别。 我想做的是让用户定义自己的任意条件,例如,为了找到掌握python技能的同事,或者YAML配置文件中的John,我将使用该文件对照python字典进行检查

我考虑让他们在YAML文件中以以下方式配置,但这需要使用exec,出于安全原因,我希望避免使用exec:

constraints:
    - "python" in colleagues[x]["skills"]
    - colleagues[x]["name"] == "John"

对于此类问题,还有哪些其他选项,以便用户可以为字典值指定自己的约束?同样,上面的字典只是一个例子。实际的查询在大小和嵌套级别上要大得多。

您可以使用Lucene查询解析器将skill:python和name:John等查询转换为可执行谓词函数,然后使用这些谓词筛选同事列表。谷歌搜索python lucene parser将显示几个解析选项。

是否可以使用获取的JSON基于此创建树,然后使用skill:python和name:John等查询来查询树?我只是想确保手动创建树不会有任何开销。是的,使用Python的json模块将树转换为dict列表,然后使用从查询中创建的谓词函数筛选出所需的dict。