python - 以字典格式读取和解析逻辑
问题描述
我正在尝试以字典格式存储一些逻辑,然后有一个 Python 解析器读取和评估,例如,在我的字典中
rule_dict = {
'logic': 'equal',
'value': '1'
}
我的解析器的定义和使用如下
def test_data_against_rule_dict(rule_dict, data):
if rule_dict['logic'] == 'equal'
return rule_dict['value'] == data
elif ...
data = 1
result = test_data_against_rule_dict(rule_dict, data)
# result = True
我需要处理其他逻辑,如,not equal
等。我可以自己定义这些逻辑的名称并自己为每个逻辑编写解析器,但我想知道是否有可以直接使用的现有标准或 Python 库。is in given list
not in given list
添加另一个示例来解释我的另一个用例,not in given list
例如:
rule_dict = {
'logic': 'exclude',
'value': '1'
}
def test_data_against_rule_dict(rule_dict, data):
if rule_dict['logic'] == 'equal'
return rule_dict['value'] == data
elif rule_dict['logic'] == 'exclude'
return rule_dict['value'] not in data
...
data = [1,2,3]
result = test_data_against_rule_dict(rule_dict, data)
# result = False
解决方案
我不知道有什么图书馆可以解决这个任务。但是,您可以使用 eval 方法来减少代码(但执行会更慢):
将您的 rule_dict 更改为应该执行的代码,如下所示:
rule = '1 not in data'
那么你的检查就变得简单了:
return eval(rule)
推荐阅读
- symfony - 使用 DQL 合并两个查询
- vue.js - force component to rebuild on route change or vuex state change
- javascript - 如何响应式地获取 Javascript 以验证来自 HTML5 表单文本框的信息?
- c# - 在 Xamarin Forms 中作为背景的图片不显示
- c - 未从 TCP 连接接收文件传输
- c - 在 Windows 中运行 C 程序时权限被拒绝
- python - 如何每秒更新python中的图表
- node.js - 在 openapi v3 中创建一个通用路径和一个特定路径
- database - 如何在 ER 图中的实体之间共享信息?
- azure-aks - 是否支持在 AKS 高级网络子网上使用 NSG,节点和主节点之间需要打开哪些端口?