【问题标题】:Python: efficient way to store objectsPython:存储对象的有效方法
【发布时间】:2014-12-17 08:33:27
【问题描述】:

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

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

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

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

【问题讨论】:

  • 一次创建字典并使用密钥访问直接
  • 这些 id 是否为连续数字形式。如果是,那么您可以通过索引直接获取它们,否则字典会很棒。
  • 不,用户没有被订购。我认为最好使用字典。谢谢!

标签: python list memory


【解决方案1】:

创建一个字典。

users = {}

如下添加每个用户的值。

users[user_id] = "user_value"

您可以通过用户 ID 提取特定记录

users[user_id]

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

【讨论】:

    【解决方案2】:

    或者使用生成器

    不要使用列表理解字典,而是使用元组

    (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
    

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 2023-01-07
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 2016-03-11
      • 1970-01-01
      相关资源
      最近更新 更多