首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python FuzzyWuzzy库匹配元组?

如何使用Python FuzzyWuzzy库匹配元组?
EN

Stack Overflow用户
提问于 2018-02-23 03:37:05
回答 2查看 458关注 0票数 1

我使用FuzzyWuzzy将字符串与包含两个字符串的元组进行匹配。例如:

代码语言:javascript
复制
from fuzzywuzzy import fuzz, process
query = "cat"
animals = [('cat','owner1'),('dog','owner3'),('lizard','owner45')]
result = process.extractOne(query, animals, scorer=fuzz.ratio)

此代码返回错误,因为要比较的列表animals不是字符串列表。我只想与元组中的第一项进行比较。我希望返回的是:(('cat','owner1), 100),因为它是100%匹配的。

下面的代码可以工作,输出('cat', 100),但我需要元组的另一部分。

代码语言:javascript
复制
from fuzzywuzzy import fuzz, process
query = "cat"
animals = ["cat","dog",'lizard']
result = process.extractOne(query, lex, scorer=fuzz.ratio)
print(result)

有什么想法吗?

编辑:我知道我可以通过列表理解得到第一个元素的列表,但出于内存和速度的原因,我希望在不创建新列表的情况下这样做,因为我正在处理大型数据集。

EN

回答 2

Stack Overflow用户

发布于 2018-02-23 03:45:52

通过使用列表理解,您可以从元组列表中创建仅包含每个元组的第一项的子列表。

代码语言:javascript
复制
>>> animal_owners = [('cat','owner1'),('dog','owner3'),('lizard','owner45')]
>>> [ao[0] for ao in animal_owners]
['cat', 'dog', 'lizard']

使用这种技术,您可以替换第二个表达式,其中您只需要动物,而不需要原始列表。

票数 1
EN

Stack Overflow用户

发布于 2021-10-13 14:25:03

我知道这篇文章比较老,但这是一个我不得不解决的问题,并找到了一种方法来解决它!如果你看一下它的签名:

代码语言:javascript
复制
process.extractOne(
     query, 
     choices, 
     processor: function=function, 
     scorer:function=function, 
     score_cutoff: int=0
)

您可以利用processor函数返回要分析的每个元组的值。例如,假设您有一个元组形式的公司名称及其股票代码列表,并希望根据公司名称获取最接近的匹配项:

代码语言:javascript
复制
from fuzzywuzzy import process

def get_company_name(tup):
    return tup[0]

choices = [
    ('Apple, Inc.', 'AAPL'), 
    ('Google, Inc.', 'GOOGL'), 
    ('Tesla, Inc.', 'TSLA')
]

closest_match = process.extractOne("apple", choices, processor=get_company_name)

然后脚本将返回一个包含最佳匹配元组和pct匹配的元组:

(('Apple, Inc.', 'AAPL'), 100)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48935837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档