python - 将字典值分配给变量或连续访问更快?

标签 python python-3.x performance dictionary

我有一本字典,例如:

d = {'a':'a-val', 'b':'b-val', 'c':'c-long-val'*1000}

我需要重复访问d['c'],如下所示:

print('value of c is', d['c'])
x_queue.put(d['c'])
some_function(d['c'])

但我想知道将 d['c'] 分配给变量并每次使用它是否会更快:

c_value = d['c']` # is this assignment "worth it"?
print('value of c is', c_value)
x_queue.put(c_value)
some_function(c_value)

我的预感是这可能取决于

  • d 中的元素数量(d 越大,查找键的成本越高)
  • d['c'] 的大小(d['c'] 越大,分配成本越高)

但我真的不确定这些选项之一(或另一个?)是否更快更Pythonic

最佳答案

虽然通过键访问字典值的平均时间复杂度为O(1),但在发生后最坏情况的时间复杂度为O(n)计算 key 的哈希值的开销。另一方面,变量赋值及其值的检索需要非常短的恒定时间,因此尽可能避免通过键重新评估字典值。

关于python - 将字典值分配给变量或连续访问更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57825332/

相关文章:

python - Pandas:在一行中删除多索引中的一个级别

python - 如何使用 Pandas 将最后一行移到第一行

css - 使用 CSS 生成的内容(即伪元素)是否比添加更多 DOM 元素更有效(即解析/渲染速度更快)?

python - 在某些条件下 Groupby 对象的最后一次出现

python - 我的包含递归函数的 Python 代码有什么问题?

python - 如何在 Python 中将制表符分隔、管道分隔转换为 CSV 文件格式

python - 我应该停止使用已弃用的模块吗?

python - 操纵列表的列表

python-3.x - 如何装饰 asyncio.coroutine 以保留其 __name__?

performance - 将几个 []byte 连接在一起的最快方法是什么?