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

如何更优雅地实现按YES/NO关键字分组后续子串?

更优雅的字符串分组解决方案

需求说明

给定输入字符串:

s = """YES string1 string2 YES string3 string4 string5 YES string6 NO String7 NO string8 string9 YES string10 string11"""

需要将其转换为按YES/NO分组的字典,输出格式如下:

wanted_output = {
"YES": [
    "string1 string2", 
    "string3 string4 string5", 
    "string6", 
    "string10 string11",
],
"NO" : ["String7", "string8 string9"]
}

现有实现代码可运行但逻辑较绕,以下是更优雅的解决方案:

优化后的代码

def convert(text):
    # 初始化分组字典,可灵活扩展其他关键字
    groups = {"YES": [], "NO": []}
    current_key = None
    current_phrase = []
    
    for word in text.split():
        # 遇到分组关键字时,先处理上一组的内容
        if word in groups:
            if current_key is not None and current_phrase:
                groups[current_key].append(" ".join(current_phrase))
                current_phrase = []
            current_key = word
        else:
            # 非关键字则加入当前短语列表
            if current_key is not None:
                current_phrase.append(word)
    # 处理循环结束后剩余的最后一组内容
    if current_key is not None and current_phrase:
        groups[current_key].append(" ".join(current_phrase))
    
    return groups

优化点说明

  • 逻辑更直观:直接跟踪当前分组和正在收集的短语,避免了原方案中用分隔符拼接再拆分的绕弯操作,可读性大幅提升
  • 扩展性更强:分组逻辑通过字典统一管理,后续若新增其他分组关键字(如MAYBE),只需修改初始化的groups字典即可
  • 更健壮:原方案依赖分隔符|,若输入字符串中包含该字符会导致错误,优化后的方案完全避免了这个风险
  • 性能更优:减少了不必要的字符串拼接与拆分操作,降低了额外的计算开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:20:57