【问题标题】:Python hash table for fuzzy matching用于模糊匹配的 Python 哈希表
【发布时间】:2012-11-28 12:24:21
【问题描述】:

我正在尝试实现一种允许基于键快速查找的数据结构。

当我的查找涉及相等时,python dict 非常棒
(例如,key == somevalue 转换为 datadict[somevalue]

问题是我还需要能够根据更复杂的比较有效地查找键,例如key > 50,或key.startswith('abc')

显然我不能在这两种情况下使用相同的解决方案,但目前我不知道如何解决这两种情况。任何人都可以建议这样做的方法吗?

【问题讨论】:

    标签: python dictionary hashtable


    【解决方案1】:

    这听起来不像你想要一个哈希算法——而是某种形式的二叉树。甚至是您使用 bisect 模块的列表。值得一看:Python's standard library - is there a module for balanced binary tree?

    另一种选择(取决于您的数据)是使用内存中的sqlite3 数据库并为可能的查找创建适当的索引——但您将用性能/内存和 SQL 语法来换取灵活性...

    【讨论】:

    • 是的,这正是我想要的! sqite3 对于我需要的东西有很多开销,但是bisect,再加上二叉搜索树应该可以解决问题。
    【解决方案2】:
    • 将所有数据项放在一个列表中。
    • 按键对列表进行排序。
    • 使用binary search 高效查找key > 50key.startswith('abc') 所在位置的项目。

    当然,这只有在您拥有非常多的数据项时才会有所回报。如果您没有那么多,只需遍历列表并将您的条件应用于每个键。

    【讨论】:

    • 我有很多项目,并且有很多插入和查询快速连续发生,因此每次都对列表​​进行排序并不是一个真正的选择。好建议!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 2020-01-27
    • 2022-12-24
    • 2018-12-13
    • 1970-01-01
    • 2022-07-06
    相关资源
    最近更新 更多