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

如何实现支持逗号分隔OR条件的姓名列表筛选功能?

优化姓名筛选逻辑以支持逗号分隔的OR条件

问题描述

现有筛选逻辑仅支持单值的startwith/contains/endwith条件,无法处理筛选字典中逗号分隔的多值OR逻辑(例如"Fira, Raja"表示匹配以Fira开头或以Raja开头的姓名),且需要筛选出同时满足所有非空条件的姓名。

解决方案

通过以下步骤实现需求:

  1. 对每个非空的筛选条件,将逗号分隔的值拆分为去空格后的列表
  2. 对每个姓名,检查其是否满足所有非空条件:每个条件下只要有一个值匹配即满足该条件(OR逻辑),所有条件都满足则保留该姓名(AND逻辑)

代码实现

def filter_names(filter_dict, names):
    required_list = []
    # 预处理筛选条件,拆分并去除空格
    processed_filters = {}
    for key, value in filter_dict.items():
        trimmed_val = value.strip()
        if trimmed_val:
            processed_filters[key] = [v.strip() for v in trimmed_val.split(',')]
    
    for name in names:
        is_match = True
        for condition, values in processed_filters.items():
            if condition == 'startwith':
                condition_met = any(name.startswith(v) for v in values)
            elif condition == 'contains':
                condition_met = any(v in name for v in values)
            elif condition == 'endwith':
                condition_met = any(name.endswith(v) for v in values)
            else:
                condition_met = False
            
            if not condition_met:
                is_match = False
                break
        if is_match:
            required_list.append(name)
    return required_list

测试示例

示例1

dict1 = {'startwith':"Fira", 'contains':"", "endwith":"Birla"}
list_of_names = ["Raja Molli Jira", "Bina Tata Birla", "Fira Kiya Too"]
print(filter_names(dict1, list_of_names))
# 输出: ["Bina Tata Birla", "Fira Kiya Too"]

示例2

dict1 = {'startwith':"Fira, Raja", 'contains':"", "endwith":""}
list_of_names = ["Raja Molli Jira", "Bina Tata Birla", "Fira Kiya Too"]
print(filter_names(dict1, list_of_names))
# 输出: ["Raja Molli Jira", "Fira Kiya Too"]

代码说明

  • 预处理筛选条件:过滤空值,拆分逗号字符串并去除每个值的空格,避免空格干扰匹配结果
  • 条件匹配逻辑:用any()实现单个条件内的OR逻辑,只要有一个值匹配即满足当前条件
  • 全局匹配逻辑:遍历所有非空条件,只要有一个条件不满足就跳过当前姓名,确保最终结果满足所有要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:25:16