生成具有特定默认值的字典有更快的方法吗?我基本上想要一个等价的
arrays = [True] * (n+1)
但是对于字典。我目前有:
dicts = dict([(i,True) for i in range(0,n+1)])
问题是n = 1000000,这个实现的时间是数组的0.016s和dicts的0.318。有没有更快的方法为字典做这个?
答案 0 :(得分:1)
烨。 dict.fromkeys
is designed for this exact use case。您的示例dicts
可以直接使用:
dicts = dict.fromkeys(range(n + 1), True)
稍慢但更灵活的是dict
理解(2.7 / 3.1 +):
dicts = {i: True for i in range(n + 1)}
3.x会慢一点,比2.x慢一些(因为True
是3.x中的一个关键字,并没有调用LEGB查找,但它&#39 ; s只是2.x中的普通内置名称,因此必须在每次使用时在引擎盖下执行多次dict
查找,以防它被重新分配)。在任何一种情况下,dict.fromkeys
都会同样快,因为True
只会查找一次。