【问题标题】:Python: Comparing 2 sets of data, yield best match and match %Python:比较 2 组数据,产生最佳匹配和匹配百分比
【发布时间】:2017-05-19 12:03:09
【问题描述】:

我已经看到很多关于这个主题的问答,但没有一个包含我正在寻找的输出类型。任何对此的智慧之言将不胜感激!

  • 我有 2 个列表...两个列表都包含 1 列,由 Full Name|University 组成(即名称和大学,由竖线连接并分隔)
  • 由于昵称和大学缩写,并不总是完全匹配。我想将列表 1 中的每条记录与列表 2 中的每条记录进行比较,并找到最接近的匹配项。
  • 然后我想生成一个包含 3 列的输出文件:列表 1 中的每个项目、列表 2 中最接近的匹配项以及匹配百分比。

有没有人可以分享示例代码?谢谢!

【问题讨论】:

  • 如果不显示一些您尝试过的代码,您可能不会获得太多帮助,但 fuzzywuzzy 是一个很好的库。
  • 尝试解释 Python 类型的问题,即 columnsrecords 不是 Python 数据类型和声音域特定的。正如 Jack 推荐的那样,一些代码示例总是很好的。
  • 我是 Python 的超级新手——我为此尝试的任何代码都被炸毁了,所以我想我会在这里问。请原谅我的菜鸟命名约定。

标签: python fuzzy-search fuzzy-logic


【解决方案1】:

为了让您入门,这里有一个答案,它可以提供全名或大学的匹配项 - 您可以将其扩展为使用模糊搜索之类的库进行模糊搜索:

  1. 对于这两个列表,将每个字符串拆分为 [full name, university] 列表(如果某些字符串不包含“|”字符,您可能需要将其包装在 try, except 或 @987654322 中@声明):

    new_list = [item.split('|') for item in old_list]

  2. 运行以下命令以匹配任一元素(假设一个列表称为list1,另一个列表称为list2):

    matches = [val for val in list1 for item in list2 if val[0] == item[0] or val[1] == item[1]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-18
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多