首页 > 解决方案 > 从列表中查找最接近的字符串匹配

问题描述

我想对不正确的用户输入进行故障排除。这正是从“数据库”中找到最接近的匹配项。

database = ["dog", "cat", "bird"]
user_input = ["dog", "ccat", "ddogg", "horse", "fish"]
for i in user_input:
   match = difflib.get_close_matches('i', words)
match

但我得到一个空列表。这个问题有什么简单的解决方案吗?我还没有找到任何地方如何使用 difflib 将结果添加到列表中。

标签: pythonstring-matchingdifflib

解决方案


实现这一点的更简单方法是使用列表理解

import difflib
database = ["dog", "cat", "bird"]
user_input = ["dog", "ccat", "ddogg", "horse", "fish"]

new_list = [difflib.get_close_matches(word, database) for word in user_input]

where根据来自以下的值new_list保存单词的最接近匹配:user_inputdatabase

[['dog'], ['cat'], ['dog'], [], []]

您的代码的问题是您i作为字符串传递'i'get_close_matches函数。将其作为变量传递,然后将match单词附加到列表中。例如,这是代码的工作版本:

new_list = []
for i in user_input:
    match = difflib.get_close_matches(i, database)
                                  #   ^ don't pass this as string
    new_list.append(match)

# new_list: [['dog'], ['cat'], ['dog'], [], []]
   

推荐阅读