3

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

dict我的查找涉及相等时
(例如key == somevalue转换为datadict[somevalue].

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

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

4

2 回答 2

4

听起来您不需要哈希算法-而是某种形式的二叉树。甚至是您使用该bisect模块的列表。值得一看:Python 的标准库 - 是否有平衡二叉树的模块?

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

于 2012-11-28T12:28:10.597 回答
3
  • 将所有数据项放在一个列表中。
  • 对键上的列表进行排序。
  • 使用二分搜索有效地查找 wherekey > 50或 where的项目key.startswith('abc')

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

于 2012-11-28T12:27:11.303 回答