Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';更快:在python中合并列表或dict?_Python_List - Fatal编程技术网

什么';更快:在python中合并列表或dict?

什么';更快:在python中合并列表或dict?,python,list,Python,List,我使用的是一个cpu限制大于内存限制的应用程序,我尝试合并两个东西,无论是列表还是目录 现在的问题是我可以选择其中之一,但我想知道合并dict是否会更快,因为它都在内存中?或者它总是O(n),n是较小列表的大小 我之所以询问dict而不是set,是因为我无法将set转换为json,因为这会导致{key1,key2,key3},而json需要一个键/值对,所以我使用dict,所以json dumps返回{key1:1,key2:1,key3:1}。是的,这是浪费,但如果它被证明是更快,那么我可以接

我使用的是一个cpu限制大于内存限制的应用程序,我尝试合并两个东西,无论是列表还是目录

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

我之所以询问dict而不是set,是因为我无法将set转换为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}

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

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

Dicts和set将同样快(并且
O(N)
,正如您猜测的那样).列表可能会慢一些,这取决于您所说的“合并”是什么意思,因为您只在Q的标题中提到,而从不在其文本中提及


考虑到
json
下游需求,所有值都设置为
1
的dict总体上是最快的——不是用于合并,而是用于json序列化。

dict和set将同样快(并且
O(N)
,正如您所猜测的那样).列表可能会慢一些,这取决于您所说的“合并”是什么意思,因为您只在Q的标题中提到,而从不在其文本中提及


考虑到
json
下游需求,所有值都设置为
1
的DICT总体上是最快的——不是用于合并,而是用于json序列化。

如果要消除重复,集合非常非常快

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

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

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

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


我的直觉反应是,如果你在搜索键,字典会更快。但你如何处理重复?我更担心的是正确性。如果你有重复的键,列表会重复你的键和值。字典只会保留其中一个值。此外,列表会保持顺序一致。你会做什么你喜欢什么


我的直觉反应是,如果你正在搜索关键字,字典会更快。但是你将如何处理重复?正如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))

希望这能有所帮助。

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

希望能有所帮助。

你能举例说明“合并”是什么意思吗?你的意思是删除重复项吗?我更新了问题,解决了你所说的问题。你能举例说明“合并”是什么意思吗?你的意思是删除重复项吗?我更新了问题,解决了你所说的问题。但是转换为列表的时间如何?但是转换为列表的时间如何?