Python中有效的团体减法搜索?

问题描述 投票:1回答:1

假设我已将文件中的某些信息加载到Python3字典中,结果如下所示。

d = {
    'hello' : ['hello', 'hi', 'greetings'],
    'goodbye': ['bye', 'goodbye', 'adios'],
}

假设我要分析一堆,绝对是一吨绝对的弦。如果字符串包含给定键d的任何值,那么我想将其归类为该键中的一个。

例如...

'My name is DDP, greetings' => 'hello'

显然,我可以像这样遍历键和值...

def classify(s, d):
    for k, v in d.items():
        if any([x in s for x in v]):
            return k

    return ''

但是我想知道对于这种批量搜索是否有更有效的算法;比我的天真循环更有效。有人知道这种算法吗?

python python-3.x search
1个回答
0
投票
您可以使用正则表达式来避免额外的操作。在这里,您所需要做的只是将单词与点字符连接起来,并将其传递给re.search()。由于顺序或确切的单词对您而言并不重要,因此您可以找出这些值和给定的字符串之间是否存在任何交集。

import re def classify(s, d): for k, v in d.items(): regex = re.compile(r'|'.join(v)) if regex.search(s): return k

还请注意,您可以代替返回k yield来获取所有出现的迭代器或使用字典来存储它们,等等。>
© www.soinside.com 2019 - 2024. All rights reserved.