我想知道是否有办法在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'