Python 3中如何将嵌套字典转为字符串?需检测括号层级
嵌套过滤字典转带括号层级的逻辑字符串
你需要把嵌套的过滤字典转换成带有正确括号层级的逻辑表达式字符串对吧?我帮你完善了递归函数,能自动识别层级并添加括号,完全适配你的数据结构。
完整实现代码
def filter_to_string(dct): # 处理单个值的原子条件(没有operator和filters) if 'value' in dct: return dct['value'] # 处理复合过滤条件 operator = dct['operator'].upper() # 转大写让表达式更规范 filters = dct['filters'] # 递归遍历每个子过滤条件,生成对应的子表达式 sub_expressions = [filter_to_string(sub_filter) for sub_filter in filters] # 用当前层级的operator连接所有子表达式,再给整个复合条件套上括号 combined = f" {operator} ".join(sub_expressions) return f"({combined})" # 你的测试数据 data = { 'filter': { 'operator': "and", 'filters': [ { 'operator': "or", 'filters': [ { 'operator': "and", 'filters': [{'value': "blue"}, {'value': "green"}] }, { 'operator': "and", 'filters': [{'value': "brown"}, {'value': "green"}] }, {'value': "green"} ] }, {'value': "red"} ] } } # 调用函数并输出结果 result = filter_to_string(data['filter']) print(result)
运行结果
执行代码后会得到符合层级要求的逻辑表达式:
((blue AND green) OR (brown AND green) OR green) AND red
关键逻辑说明
- 递归终止条件:当字典包含
value键时,直接返回该值,这是最基础的原子条件,不需要额外处理。 - 复合条件层级处理:每遇到带有
operator和filters的复合节点,就递归处理所有子条件,再用当前节点的运算符连接。 - 自动括号包裹:所有复合条件都会被包裹在括号中,完美对应原字典的嵌套层级,避免逻辑歧义。
内容的提问来源于stack exchange,提问作者Droid
相关产品推荐
相关产品推荐

