【发布时间】:2012-05-07 11:27:55
【问题描述】:
我应该如何实现对集合中项目的快速查找?
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__ 获取对象本身。
最好的选择是什么?
【问题讨论】:
-
四个小时?您的数据库中必须有 很多 人……说真的,向我们展示您的代码。
-
使用数据库即可。 (
SELECT * FROM people ORDER BY age DESC LIMIT 5) -
我很确定
__*__是保留的,如果您想创建私有财产,请使用__all。 -
all后面的双下划线是什么意思? -
@gnibbler
__*__方法和属性用于类成本化、覆盖运算符等。__*是私有属性,解释器重命名这些属性,因此您的代码无法直接.
标签: python database sorting indexing python-2.7