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我将第一个列表放在第二个位置,它仍然返回它,因此如果您能提供更多详细信息。。。你用了什么作为关键词?嗨,伙计,谢谢你的回复。我已经试过了,但它并没有达到我预期的效果,这会为外部列表中的每个列表返回一个结果,即使结果为空。我会尝试修改它,看看是否能让它工作