1

我应该如何实现对集合中项目的快速查找?

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 中要慢。(我可以轻松地将每个对象放入 ram 中)。

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

什么是最好的选择?

4

2 回答 2

1

您可以使用 sqlite 创建内存数据库。如果需要,以后可以很容易地将数据库移动到磁盘

于 2012-05-07T12:08:25.080 回答
1

字典是哈希表的 Python 版本,它保证(平均)快速查找。它不能保证快速“找到最少的k个元素”——事实上,这会很慢,因为您需要查看字典中的每个人。

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

Python 没有这样的内置数据结构,但是有一个使用良好且经过良好测试的包blist,它提供了sorteddict. 您想使用其中之一。

于 2012-05-07T12:03:41.260 回答