我有一个“collections.defaultdict”(参见下面的x),它是一个多值字典。与每个唯一键关联的所有值都存储在列表中。
>>>x
defaultdict(<type 'list'>, {'a': ['aa', 'ab', 'ac'], 'b': ['ba', 'bc'], 'c': ['ca', 'cb', 'cc', 'cd']})
我想使用 Python fuzzywuzzy 包根据多值字典中嵌套的所有值搜索目标字符串,并根据 fuzzywuzzy 的内置编辑距离公式返回前 5 个匹配项。
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
query = 'bc'
choices = x
result = process.extract(query, choices, limit=5)
然后我将运行一个进程,该进程采用最接近的匹配(具有最高模糊比率分数的值)并识别最接近的匹配值与哪个键关联。在此示例中,最接近的匹配值当然是“bc”,关联的键是“b”。
我的问题是:如何对字典嵌套列表中的所有值运行 fuzzywuzzy 查询?当我运行上面的 fuzzywuzzy 进程时,我得到一个 TypeError:预期的字符串或缓冲区。
最佳答案
要从平面列表中的字典中获取列表中的所有值,请使用
from itertools import chain
并更改行
choices = x
至
choices = chain.from_iterable(x.values())
如果在您的真实数据中存在重叠值,请考虑从中创建一个集合
。
结果:
[('bc', 100), ('ba', 50), ('ca', 50), ('cb', 50), ('cc', 50)]
关于python - 对多值字典的嵌套列表中的所有值运行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35170444/