我如何通过搜索列表中的元素来使用 difflib return 列表?
How do i use difflib to return a list by searching for an element in the list?
我有一个看起来像这样的列表列表:
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
(或其他东西)return 整个内部列表?
我认为它会如何工作:
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_closest_matches的第二个参数应该是一个字符串列表,来自documentation:
possibilities is a list of sequences against which to match word
(typically a list of strings).
要解决您的问题,请执行以下操作:
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']
想法是关键函数会return每个列表的最佳匹配的相似度,然后你可以结合max使用它来找到最佳匹配的列表。
我有一个看起来像这样的列表列表:
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
(或其他东西)return 整个内部列表?
我认为它会如何工作:
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_closest_matches的第二个参数应该是一个字符串列表,来自documentation:
possibilities is a list of sequences against which to match word (typically a list of strings).
要解决您的问题,请执行以下操作:
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']
想法是关键函数会return每个列表的最佳匹配的相似度,然后你可以结合max使用它来找到最佳匹配的列表。