如何用difflib.get_close_matches匹配带标识的重复字符串?
解决方案
difflib.get_close_matches 默认只会返回去重后的匹配字符串,无法关联原列表中的标识信息,因此需要基于difflib的核心匹配逻辑自定义函数,保留所有符合条件的完整项:
自定义实现代码
import difflib def get_close_matches(pattern, data_list, cutoff=0.6): matches = [] matcher = difflib.SequenceMatcher() matcher.set_seq2(pattern) for item in data_list: # 假设每个子列表的第一个元素是待匹配字符串 matcher.set_seq1(item[0]) if matcher.ratio() >= cutoff: matches.append(item) return matches # 测试示例 my_list = [["apple", 2], ["banana", 3], ["apple", 1]] result = get_close_matches("ap", my_list) print(result) # 输出: [["apple", 2], ["apple", 1]]
代码说明
- 基于
difflib.SequenceMatcher实现和原get_close_matches一致的相似度计算逻辑,保证匹配规则统一 - 遍历输入的二维列表,对每个子项的字符串部分计算相似度,符合阈值的完整项直接加入结果列表
- 保留所有重复字符串对应的不同标识项,不会自动去重
- 可通过调整
cutoff参数(范围0-1)控制匹配的严格程度,值越高要求匹配度越接近
内容的提问来源于stack exchange,提问作者Fire Cube
相关产品推荐
相关产品推荐

