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

如何通过两个字符串参数对字典进行多条件过滤?

现有实现的问题分析
  • 命名冲突:你定义的函数名name、severity和Click传入的参数名完全重名,函数内部判断not name时会优先识别为函数对象而非传入的参数值,判断逻辑永久失效。
  • 逻辑覆盖不全:拆分的三个独立函数没有处理两个参数同时传入的联合校验场景,无法满足同时匹配两个条件的需求。
  • 冗余循环:不需要遍历子字典的所有键值对找目标字段,直接用字典get方法取对应字段即可,多余的嵌套循环会降低代码效率、增加出错概率。
可行解决方案

首先补充Click参数定义,再替换核心过滤逻辑即可:

import click

# Click参数定义,未传参数时默认值为None
@click.command()
@click.option('--name', help='按主机名过滤,不传则不校验该条件')
@click.option('--severity', help='按Severity过滤,不传则不校验该条件')
def main(name, severity):
    # 此处替换为你实际的hostname_list数据源
    hostname_list = {"sap_landscape": {}}

    # 核心过滤逻辑
    for _, server_info in hostname_list['sap_landscape'].items():
        current_host = server_info.get("hostname")
        current_sev = server_info.get("Severity")
        match_flag = True

        # 仅当用户传入name参数时才校验主机名匹配
        if name is not None and current_host != name:
            match_flag = False
        # 仅当用户传入severity参数时才校验Severity匹配
        if severity is not None and current_sev != severity:
            match_flag = False

        if match_flag:
            print(server_info)

if __name__ == "__main__":
    main()
实现原理说明
  • 自动适配三种过滤场景:每个参数的校验逻辑独立,只有用户传入了对应参数才会触发校验,未传则跳过该条件,天然支持仅按name过滤、仅按severity过滤、双参数联合过滤三种需求,不需要写多分支判断不同参数组合。
  • 无命名冲突风险:没有额外定义和参数重名的函数,判断逻辑不会出现歧义。
  • 代码简洁高效:直接取字典目标字段做判断,省去了嵌套循环遍历的开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:18:03