Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中执行模糊键查找的最佳方法是什么?_Python_Data Structures_Hashmap_Hashtable_Python Collections - Fatal编程技术网

在Python中执行模糊键查找的最佳方法是什么?

在Python中执行模糊键查找的最佳方法是什么?,python,data-structures,hashmap,hashtable,python-collections,Python,Data Structures,Hashmap,Hashtable,Python Collections,我有一个问题,我需要在散列映射中进行模糊查找,即返回与查询最相似的键对应的值,在我的例子中,该值由Levenshtein距离度量 我目前的方法是使用一种特殊的查找方法将dict子类化,该方法根据所有键计算Levenshtein距离,然后返回得分最低的键的值。基本上: import Levenshtein class FuzzyLookupDict(dict): def fuzzy_lookup(self, query): levs = [(key, Levenshte

我有一个问题,我需要在散列映射中进行模糊查找,即返回与查询最相似的键对应的值,在我的例子中,该值由Levenshtein距离度量

我目前的方法是使用一种特殊的查找方法将
dict
子类化,该方法根据所有键计算Levenshtein距离,然后返回得分最低的键的值。基本上:

import Levenshtein

class FuzzyLookupDict(dict):

    def fuzzy_lookup(self, query):
        levs = [(key, Levenshtein.ratio(query, key)) for key in self.keys()]
        key, score = max(levs, key=lambda lev: lev[1])
        return self.get(key)

这是一个很好的方法,还是有一个我没有想到的更好的解决方案?

这个问题通常是通过解决的。字符串w和数字n的Levenshtein自动机是一种有限状态自动机,它可以识别Levenshtein与w的距离最多为n的所有字符串集

该算法比使用动态规划分别计算每个字典单词的Levenshtein距离要快得多

Jule Jacob的博客文章是一个很好的起点,Nick Johnson的是一个更深入的介绍


例如,你可以在Github上找到一些Python实现。

除非你能想出一种聪明的方法在一个额外的表中索引键,否则我认为不搜索所有键就不可能做到这一点。