You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅校验字典键值对是否满足用户自定义搜索条件?

优雅实现字典条件校验方案

需求场景

有一个结构如下的字典:

dictionary = {'a':25, 'ab':3.3, '(cd)': 4, 'ef':35, 'gh':12.2, ...}

用户会输入一串用逗号分隔的搜索条件,比如:

'a > 5, 0 < (cd) < 6, ef < 35'

需要判断这个字典是否满足所有条件,满足就执行对应逻辑,不满足则执行其他操作。

之前用split(',')拆分条件后逐个解析键、运算符和数值的方式太繁琐,这里给你两种更简洁的实现思路:


思路一:用eval()动态求值

⚠️ 注意:这种方式只适用于完全可信的条件输入,避免恶意代码注入风险。

核心思路是把条件里的键替换成字典对应的数值,再用eval()直接计算条件的布尔结果,最后判断所有条件是否都成立。

示例代码:

dictionary = {'a':25, 'ab':3.3, '(cd)': 4, 'ef':35, 'gh':12.2}
condition_str = 'a > 5, 0 < (cd) < 6, ef < 35'

# 拆分条件并去除空格
conditions = [cond.strip() for cond in condition_str.split(',')]

# 把条件中的键替换成字典里的对应值
def replace_keys(cond, d):
    for key in d:
        cond = cond.replace(key, str(d[key]))
    return cond

# 检查所有条件是否都满足
all_met = all(eval(replace_keys(cond, dictionary)) for cond in conditions)

if all_met:
    print("满足所有条件")
else:
    print("不满足所有条件")

运行后会输出不满足所有条件,因为ef=35不符合ef < 35的要求。


思路二:用Pandas DataFrame校验

如果项目里已经在用Pandas,这种方式会更顺手。把字典转成单行DataFrame,用query()方法直接执行条件判断。

示例代码:

import pandas as pd

dictionary = {'a':25, 'ab':3.3, '(cd)': 4, 'ef':35, 'gh':12.2}
condition_str = 'a > 5, 0 < (cd) < 6, ef < 35'

# 把逗号分隔的条件替换成Pandas query支持的and
query_condition = condition_str.replace(',', ' and ')

# 转成单行DataFrame
df = pd.DataFrame([dictionary])

# 判断是否满足所有条件:筛选后不为空则满足
all_met = not df.query(query_condition).empty

if all_met:
    print("满足所有条件")
else:
    print("不满足所有条件")

内容的提问来源于stack exchange,提问作者Murchak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:18:15