Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用difflib通过搜索列表中的元素来返回列表?_Python_Search_Matching_Difflib - Fatal编程技术网

Python 如何使用difflib通过搜索列表中的元素来返回列表?

Python 如何使用difflib通过搜索列表中的元素来返回列表?,python,search,matching,difflib,Python,Search,Matching,Difflib,我有一个列表,如下所示: list123 = [["Title a1","100 Price","Company xx aa"], ["Title b1","200 Price","Company yy bb"], ["Title c1","300 Price","Company zz cc"]] 如何使用diffl

我有一个列表,如下所示:

list123 = [["Title a1","100 Price","Company xx aa"], ["Title b1","200 Price","Company yy bb"], ["Title c1","300 Price","Company zz cc"]]
如何使用
difflab.get_close_matches
(或其他)通过搜索与搜索参数匹配的特定内部元素来返回整个内部列表

我认为它将如何工作:

print(difflib.get_close_matches('Company xx a', list123))
预期产出/产出我想:

 ["Title a1","100 Price","Company xx aa"]
实际产量:

 []
我知道使用类似以下的方法:

for item in list123:
    if "Company xx aa" in item:
        print(item)
但是我想使用difflib库(或者其他什么)来允许更多的“人工”搜索,允许出现小的拼写错误

如果我误解了函数的用途,是否还有其他函数可以实现我想要的功能?

我尝试了以下方法:

list123 = [["Title a1", "100 Price", "Company xx aa"], ["Title b1",
                                                    "200 Price", "Company yy bb"], ["Title c1", "300 Price", "Cpswdaany zsdwz cawdc"]]
for item in list123:

     print(difflib.get_close_matches("Company xx aa", item))
您必须调整该函数,以指定它的“可读性”。
您还可以检查以下内容:

问题是get\u nestest\u matches的第二个参数应该是字符串列表,来自:

“可能性”是一个序列列表,用于匹配单词 (通常是字符串列表)

要解决问题,请执行以下操作:

import difflib


def key(choices, keyword='Company xx a'):
    matches = difflib.get_close_matches(keyword, choices)
    if matches:
        best_match, *_ = matches
        return difflib.SequenceMatcher(None, keyword, best_match).ratio()
    return 0.0


list123 = [["Title a1", "100 Price", "Company xx aa"],
           ["Title b1", "200 Price", "Company yy bb"],
           ["Title c1", "300 Price", "Company zz cc"]]

res = max(list123, key=key)

print(res)
输出

['Title a1', '100 Price', 'Company xx aa']

其思想是,键函数将返回每个列表的最佳匹配的相似性,然后您可以将其与一起使用,以查找具有最佳匹配的列表。

感谢您的回复和努力,我非常感谢!不幸的是,我无法真正让它工作,似乎无论我使用什么作为关键字,它总是返回第一行,我将尝试调试更多并返回。@nordmanden我将第一个列表放在第二个位置,它仍然返回它,因此如果您能提供更多详细信息。。。你用了什么作为关键词?嗨,伙计,谢谢你的回复。我已经试过了,但它并没有达到我预期的效果,这会为外部列表中的每个列表返回一个结果,即使结果为空。我会尝试修改它,看看是否能让它工作