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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:45:32