Python:存储对象的有效方法

Python:存储对象的有效方法,python,list,memory,Python,List,Memory,我必须在内存中存储300多个对象(用户),并根据其ID获取这些用户。 最有效的方法是什么 目前我将对象存储在列表中,要从列表中获取用户,我使用以下代码: [u for u in users if u.id == id] 这似乎不是很有效,因为在最坏的情况下,我必须迭代整个列表。创建一个dict users={} 按如下方式添加每个用户的值 users[user\u id]=“user\u value” 您可以通过用户id提取特定记录,如下所示: 用户[用户id] 您可以将其存储在mongo中,

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

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

[u for u in users if u.id == id]
这似乎不是很有效,因为在最坏的情况下,我必须迭代整个列表。

创建一个dict

users={}

按如下方式添加每个用户的值

users[user\u id]=“user\u value”

您可以通过用户id提取特定记录,如下所示:

用户[用户id]

您可以将其存储在mongo中,也可以使用pickle进行存储。

创建dict

users={}

按如下方式添加每个用户的值

users[user\u id]=“user\u value”

您可以通过用户id提取特定记录,如下所示:

用户[用户id]

您可以将其存储在mongo中,也可以使用pickle存储。

或使用生成器

不要使用列表,而是使用元组

(如果u.id==id,则u代表用户中的u)

编辑

如果ids是唯一的,则我的解决方案与此无关,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
或者使用发电机

不要使用列表,而是使用元组

(如果u.id==id,则u代表用户中的u)

编辑

如果ids是唯一的,则我的解决方案与此无关,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

一次性创建dict并使用keyAre访问direclty这些ID是顺序数字形式的。如果是的话,你可以通过索引直接得到它们,否则字典就太好了。不,用户是没有顺序的。我认为用口述最好。谢谢一次性创建dict并使用keyAre访问direclty这些ID是顺序数字形式的。如果是的话,你可以通过索引直接得到它们,否则字典就太好了。不,用户是没有顺序的。我认为用口述最好。谢谢