我想知道是否有办法在python字典中进行“模糊”的键搜索。例如,我有一本这样的字典:

data = { "Google.com" : value1, "StackOverFlow": value2, ....}

如果我有绳子
name= "Google" or name = "google" or even name = "gooogle"

我想在我的字典中访问value1(其键是“Google.com”),我该怎么做?我知道我可以遍历键列表并做一些字符串处理,但是如果我有多个名字,我想做这样模糊的搜索,它将是O(n^2)对吗?有什么有效的方法可以做到吗?假设数据字典非常大。
希望我的问题是清楚的。。。

最佳答案

如果你想做一些模糊搜索,那么你就必须拿出自己的哈希算法。或者创建自己的字典变体并覆盖.__getitem__和相关方法。
下面是一个例子:

from jellyfish import soundex

data = {soundex('google'): 'google.com', soundex('stackoverflow'): 'stackoverflow.com'}
print(data[soundex('gooooogle')])
# Should print `google.com`, because soundex pretty much ignores vowels

或者另一种选择:
from jellyfish import soundex

class SoundexDict(dict):
    # __init__ and __repr__ is left as an exercise for the reader
    def __getitem__(self, key):
        return super().__getitem__(soundex(key))

    def __setitem__(self, key, value):
        super().__setitem__(soundex(key), value)

mydict = SoundexDict()
mydict['google'] = 'google.com'
print(mydict['gewgle'])  # prints 'google.com'

07-24 09:52
查看更多