如何优化字典嵌套列表场景下的正则表达式标题分类匹配?
问题分析
你的现有代码逻辑完全搞反了——原代码是在匹配分类名称(也就是categories字典的键,比如phone),但你的实际需求是匹配分类对应的关键词列表(字典的值,比如phone对应的["Oppo", "iPhone", ...]),这就是为啥明明标题里有关键词却总是返回general的原因。
优化后的实现
下面是基于你现有字典结构的修复方案,完全不用正则,只通过字符串匹配实现,同时处理大小写问题:
def put_category(categories, text): # 统一转小写,避免大小写不匹配的问题 lower_text = text.lower() # 遍历每个分类及其对应的关键词列表 for category, keywords in categories.items(): # 检查当前分类的所有关键词 for keyword in keywords: # 关键词也转小写,确保匹配一致 if keyword.lower() in lower_text: # 匹配到就直接返回对应分类 return category # 没有匹配到任何分类,返回general return 'general'
关键说明
- 统一转小写:不管标题里的关键词是大写还是小写(比如
OPPO或oppo),都能正确匹配 - 遍历逻辑:按字典顺序检查每个分类的关键词,一旦找到匹配就返回对应分类(如果需要调整分类优先级,只要调整
categories字典里键的顺序即可) - 纯字符串匹配:完全符合你“不使用纯正则或模糊匹配”的要求
比如测试你的示例标题:
categories = { "phone": ["Oppo", "iPhone", "Samsung"], "camera": ["night shots", "lens"], "general": [] } title = "Capture Perfect Night Shots with the Oppo Reno8 Series" print(put_category(categories, title)) # 输出: phone
内容的提问来源于stack exchange,提问作者Nicoconut
相关产品推荐
相关产品推荐

