什么更快:在python中合并列表或dicts?

时间:2010-05-17 03:04:28

标签: python list

我正在使用一个超出内存限制的cpu绑定的应用程序,我正在尝试合并两个东西,无论它们是列表还是dicts。

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

我询问dicts而不是sets的原因是因为我无法将一个集转换为json,因为这导致{key1,key2,key3}和json需要一个键/值对,所以我使用的是dict所以json dumps返回{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 个答案:

答案 0 :(得分:2)

如果您正在寻找重复消除,则设置非常非常快。

>>> 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))

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

考虑到json下游要求,所有设置为1的值的整体将是最快的 - 不是用于合并,而是用于JSON序列化。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

希望有所帮助。