【问题标题】:what's faster: merging lists or dicts in python?什么更快:在 python 中合并列表或字典?
【发布时间】:2010-05-17 03:04:28
【问题描述】:

我正在使用一个受 CPU 限制多于内存限制的应用程序,并且我正在尝试合并两个东西,无论它们是列表还是字典。

现在问题是我可以选择其中一个,但我想知道合并字典是否会更快,因为它都在内存中?还是总是 O(n),n 是较小列表的大小。

我询问 dicts 而不是 set 的原因是因为我无法将 set 转换为 json,因为这会导致 {key1, key2, key3} 并且 json 需要一个键/值对,所以我使用的是 dict所以 json 转储返回 {key1:1, key2:1, key3:1}。是的,这很浪费,但如果它被证明更快,那么我可以接受。

编辑:我的问题是使用 dict 和 list 进行合并的区别,我最初错误地列出了 dict 和 set。

dict1 = {"the" : {"1":1, "3":1, "10":1}

dict2 = {"the" : {"11":1, "13":1}}

合并后

dict3 = {"the" : {"1":1, "3":1, "10":1, "11":1, "13":1}

【问题讨论】:

  • 您能举例说明“合并”是什么意思吗?您的意思是删除重复项?
  • 我更新了解决你所说的问题

标签: python list


【解决方案1】:

如果您正在寻找重复消除,集合非常非常快。

>>> x = set(range(1000000,2000000))
>>> y = set(range(1900000,2900000))

the following happened in ~0.020s  
>>> z = set.intersection(x,y)
>>> len(z)
100000

关于输出到json,直接转换成列表就行了……

json_encode(list(z))

【讨论】:

  • 但是转换为列表的时间呢?
【解决方案2】:

您可以使用timeit 模块来测量代码的速度,但我猜测它们实际上是相同的(因为可能使用字典来实现集合)。

【讨论】:

    【解决方案3】:

    Dicts 和 Sets 将同样快(和O(N),正如您所猜测的那样)。列表,您只在 Q 的标题中提及,而从未在其文本中提及,可能会更慢,这取决于您所说的“合并”。

    鉴于 json 下游要求,值全部设置为 1 的 dicts 总体上将是最快的——不是用于合并,而是用于 JSON 序列化。

    【讨论】:

      【解决方案4】:

      我会更担心正确性。如果您有重复的键,该列表将重复您的键和值。字典只会保留其中一个值。此外,列表将保持顺序一致。你更喜欢哪个?

      我的直觉是,如果您要搜索键,字典会更快。但是你将如何处理重复?

      【讨论】:

        【解决方案5】:

        正如 Michael 所说,使用 timeit 模块并亲自查看可能是最简单的。这很容易做到:

        import timeit
        def test():
            # do your thing here
            # including conversion to json
            pass
        
        result = timeit.repeat(test, repeat=10, number=10000)
        print '{0:.2}s per 10000 test runs.'.format(min(result))
        

        希望对您有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-08-11
          • 2012-07-17
          • 2015-01-10
          • 2021-10-06
          • 1970-01-01
          相关资源
          最近更新 更多