代码之家  ›  专栏  ›  技术社区  ›  tipu

更快的是:在python中合并列表或dict?

  •  0
  • tipu  · 技术社区  · 15 年前

    我正在使用一个CPU绑定的应用程序,而不是内存绑定的应用程序,我正在尝试合并两个东西,不管它们是列表还是听写。

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

    我之所以询问dict而不是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

    5 回复  |  直到 15 年前
        1
  •  2
  •   Jon W    15 年前

    如果你在寻找重复消除,集合是非常,非常快的。

    >>> 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
  •  1
  •   Michael Aaron Safyan    15 年前

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

        3
  •  1
  •   Alex Martelli    15 年前

    听写和听写的速度也一样快(而且 O(N) 正如你所猜测的那样)。列表,你只在你的Q的标题中提到,而不是在它的文本中提到,可能会变慢,这取决于你所说的“合并”是什么意思。

    鉴于 json 下游需求,值均设置为的dict 1 总体来说,这将是最快的——不用于合并,而是用于JSON序列化。

        4
  •  0
  •   wisty    15 年前

    我更担心正确性。如果您有重复的键,列表将复制您的键和值。字典只保存其中一个值。此外,列表将保持订单的一致性。你喜欢哪一种?

    我的直觉反应是,如果你在寻找钥匙,字典会更快。但是你将如何处理复制呢?

        5
  •  0
  •   Tripzilch    15 年前

    正如迈克尔所说,使用 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))
    

    希望有帮助。