首页 > 解决方案 > 以字典格式读取和解析逻辑

问题描述

我正在尝试以字典格式存储一些逻辑,然后有一个 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 listnot 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

标签: pythonlogic

解决方案


我不知道有什么图书馆可以解决这个任务。但是,您可以使用 eval 方法来减少代码(但执行会更慢):

将您的 rule_dict 更改为应该执行的代码,如下所示:

rule = '1 not in data'

那么你的检查就变得简单了:

return eval(rule)

推荐阅读