【问题标题】:Faster way in generating default dictionary [duplicate]生成默认字典的更快方法[重复]
【发布时间】:2017-03-10 01:32:53
【问题描述】:

有没有更快的方法来生成具有特定默认值的字典?我基本上想要一个等价的

arrays = [True] * (n+1)

但对于字典。我目前有:

dicts = dict([(i,True) for i in range(0,n+1)])

问题在于 n = 1000000,我在这个实现中得到的时间是数组的 0.016 秒和字典的 0.318 秒。有没有更快的方法来为字典执行此操作?

【问题讨论】:

  • dict.fromkeys(range(n + 1), True)
  • 100 万个键需要 0.177 秒。您无法获得更快的速度,因为散列和将 100 万个键放入哈希表比构建包含 100 万个引用的数组需要更多时间。
  • 好的,谢谢,这行得通。感谢您的信息

标签: python dictionary


【解决方案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 查找,但它只是一个普通的内置2.x 中的名称,因此必须在每次使用时在后台执行多个 dict 查找,以防它被重新分配)。 dict.fromkeys 在任何一种情况下都一样快,因为True 只会被查找一次。

【讨论】:

  • 好的,感谢您的解释
猜你喜欢
  • 2021-07-27
  • 2011-06-29
  • 2016-06-25
  • 2014-11-14
  • 2011-10-15
  • 2020-06-15
  • 2017-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多