我必须在内存中存储300多个对象(用户),并根据他们的ID获取这些用户。 最有效的方法是什么?
目前我将对象存储在列表中,从列表中获取用户我使用此代码:
[u for u in users if u.id == id]
这似乎并不高效,因为在最坏的情况下我必须遍历整个列表。
答案 0 :(得分:4)
创建一个词典。
users = {}
按如下方式添加每个用户的值。
users[user_id] = "user_value"
您可以通过用户ID
提取特定记录 users[user_id]
您可以将其存储在mongo中或使用pickle存储它。
答案 1 :(得分:1)
或使用发电机
而不是使用列表理解dict使用元组
(u for u in users if u.id == id)
修改强>
如果id是唯一的,我的解决方案无关,dict一个更好,但问题是性能相关的发生器方式有一个很好的性能峰值,就像我的性能测试会显示:
import timeit
setup = """
from random import randint
class User:
id = randint(0,10000)
users = [User() for _ in range(0,100)]
def generator_sample(users):
final = (u for u in users if u.id == 100)
def list_sample(users):
final = [u for u in users if u.id == 100]
"""
print timeit.timeit('generator_sample(users)', setup=setup) # 0.413088083267
print timeit.timeit('list_sample(users)', setup=setup) # 4.37370610237