现有示例数据
# 示例数据
pending_join = [
{'increment': "department = 'Finance'", 'statement_index': 0},
{'increment': "name = 'Lisa'", 'statement_index': 2},
{'increment': "gender = 'Female'", 'statement_index': 3},
{'increment': "hire_date < '2022-01-01'", 'statement_index': 1},
]
logic = [
{'operator': 'and', 'operands': [0, 1], 'result': 'result1'},
{'operator': 'and', 'operands': [2, 3], 'result': 'result2'},
{'operator': 'or', 'operands': ['result1', 'result2'], 'result': 'result3'},
]
要求输出
# 示例输出
output = "((department = 'Finance' AND hire_date < '2022-01-01') OR (name = 'Lisa' AND gender = 'Female'))"
思路:
1.在logic中查找最后的result,依据是它的operands没有出现过的result
2.构建递归函数,返回条件是参数operand为数字,并返回pending_join[x].increment
# coding=utf-8# 示例数据
pending_join = [
{'increment': "department = 'Finance'", 'statement_index': 0},
{'increment': "name = 'Lisa'", 'statement_index': 2},
{'increment': "gender = 'Female'", 'statement_index': 3},
{'increment': "hire_date < '2022-01-01'", 'statement_index': 1},
]logic = [
{'operator': 'and', 'operands': [0, 1], 'result': 'result1'},
{'operator': 'and', 'operands': [2, 3], 'result': 'result2'},
{'operator': 'or', 'operands': ['result1', 'result2'], 'result': 'result3'},
]# 示例输出
output = "((department = 'Finance' AND hire_date < '2022-01-01') OR (name = 'Lisa' AND gender = 'Female'))"def final_result(logic_op):result_list = []operands_list = []for op in logic_op:result_list.append(op.get('result'))operands_list.append(op.get('operands')[0])operands_list.append(op.get('operands')[1])for op in logic_op:if not op.get('result') in operands_list:print('final_result:',op.get('result'))return op.get('result')def get_result(operand):# return strif str(operand).isnumeric():for peading in pending_join:if peading.get('statement_index')==operand:return peading.get('increment')for op in logic:if op.get('result') == operand:op1 = op.get('operands')[0]op2 = op.get('operands')[1]return '({} {} {})'.format(get_result(op1),op.get('operator').upper(),get_result(op2))final_res = final_result(logic)
fr = get_result(str(final_res))
print(fr)