python - 对多值字典的嵌套列表中的所有值运行查询

标签 python dictionary nested-lists fuzzywuzzy multi-value-dictionary

我有一个“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/

相关文章:

python - 将对象类型的数据框列转换为浮点型

python - 属性错误 : module 'sklearn.mixture' has no attribute 'GMM'

python - 如何在字典中的现有键中添加新值(而不丢失以前的值)?

python - for 循环跳过 python 中字典的部分

python - Django 分层模型列表

python - 如何从odoo 8中的orm获取数据库值和从字符串获取字段名称

python - 带 CUDA 的 tensorflow : ImportError

python - 字典组成和通过列表条目更新值

python - 使用嵌套列表理解提高执行速度

Python2 : access nested list using a list of indices