维护列表上的索引

时间:2012-05-07 11:27:55

标签: python database sorting indexing python-2.7

如何在集合中实现非常快速的项目查找?

class Person(object):
    __all__ = dict()

    def __init__(self, _id, name, age):
        self._id = _id
        self.name = name
        self.age = age
        self.__class__.__all__[_id] = self

假设我希望得到五个最老的人。如果len(Person.__all__)非常大,我需要经常进行此操作,那么最佳做法是什么?目前我的代码需要大约4小时才能运行,而我甚至还没有提供整个数据集。

我目前的想法是我可以使用数据库来维护索引,但我的感觉是,这比将所有对象保留在ram中要慢。 (我可以舒适地适应公羊的每个物体。)

,我可以在Python中使用基于自动排序列表的某种索引。所以,当我需要查找某个年龄段的人时,我会查询该列表,找到ID,然后使用Person.__all__来获取对象本身。

什么是最佳选择?

2 个答案:

答案 0 :(得分:1)

字典是哈希表的Python版本,它保证(平均)快速查找。它保证快速“找到最少的 k 元素” - 事实上,这将是缓慢的,因为你需要查看字典中的每个人。 / p>

相反,您希望将人员存储在排序数据结构中,从那时起,您只需查看第一个(或最后一个)五个条目即可找到最老的人。

Python没有这样的内置数据结构,但有一个名为blist的经过充分利用且经过良好测试的软件包提供sorteddict。你想使用其中一个。

答案 1 :(得分:1)

您可以使用sqlite创建内存数据库。如果需要

,稍后可以轻松地将数据库移动到磁盘