Python:存储对象的有效方法

时间:2014-12-17 08:33:27

标签: python list memory

我必须在内存中存储300多个对象(用户),并根据他们的ID获取这些用户。 最有效的方法是什么?

目前我将对象存储在列表中,从列表中获取用户我使用此代码:

[u for u in users if u.id == id]

这似乎并不高效,因为在最坏的情况下我必须遍历整个列表。

2 个答案:

答案 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