我正在尝试实现一种允许基于键快速查找的数据结构。
当dict
我的查找涉及相等时
(例如key == somevalue
转换为datadict[somevalue]
.
问题是我还需要能够基于更复杂的比较(例如key > 50
或)有效地查找键key.startswith('abc')
。
显然我不能在这两种情况下使用相同的解决方案,但目前我无法弄清楚如何解决这两种情况。任何人都可以建议这样做的方法吗?
我正在尝试实现一种允许基于键快速查找的数据结构。
当dict
我的查找涉及相等时
(例如key == somevalue
转换为datadict[somevalue]
.
问题是我还需要能够基于更复杂的比较(例如key > 50
或)有效地查找键key.startswith('abc')
。
显然我不能在这两种情况下使用相同的解决方案,但目前我无法弄清楚如何解决这两种情况。任何人都可以建议这样做的方法吗?
听起来您不需要哈希算法-而是某种形式的二叉树。甚至是您使用该bisect
模块的列表。值得一看:Python 的标准库 - 是否有平衡二叉树的模块?
另一种选择(取决于您的数据)是使用内存sqlite3
数据库并为可能的查找创建适当的索引——但您将用性能/内存和 SQL 语法来换取灵活性......
key > 50
或 where的项目key.startswith('abc')
。当然,这只有在您拥有非常多的数据项时才会有所回报。如果您没有那么多,只需遍历列表并将您的条件应用于每个键。