命名dict键以便在python中快速查找

ada*_*dam 8 python django performance dictionary

我将要有一个小字典(5到20个键之间),对于python 2.5中的一个页面加载,它将被引用多达一百次.

我开始命名它将要查找的键,我想知道是否有一个关键的命名约定我可以遵循以帮助dict查找时间.

Fre*_*ihl 8

我不得不测试;-)

运用

  • f1,整数键 1
  • f2短弦, "one"
  • f3长串 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"

作为长度字典的关键之一4.迭代10,000,000次并测量时间.我得到这个结果:

<function f1 at 0xb779187c>
f1 3.64
<function f2 at 0xb7791bfc>
f2 3.48
<function f3 at 0xb7791bc4>
f3 3.65
Run Code Online (Sandbox Code Playgroud)

没有区别......

我的代码

  • 所以基本上我正在收集...不要担心它,特别是对于如此小的字典和相对较少的查找次数. (3认同)

小智 6

可能是他们明智的名字,仅仅如此碰巧产生,其散列冲突没有名字.然而,CPython的类型的字典已经在已知的宇宙中最优化的数据结构之一,产生一些碰撞对于大多数的投入,与其他内置类型的散列方案运作良好,解决冲突非常快,等,这是不可能的,你会看到即使你发现了什么,也可以获得任何好处,特别是因为一百次查找并不是那么多.

举例来说,这个基于我4年历史的台式机运行时间基准(运行一个可笑的低预算双核CPU,3.1 GHz):

...>python -mtimeit --setup="d = {chr(i)*100: i for i in range(15)};\
k = chr(7)*100" "d[k]"

1000000 loops, best of 3: 0.222 usec per loop
Run Code Online (Sandbox Code Playgroud)

这些字符串比手动输入变量名远程敏感的所有字符串大十倍.将长度从100减少到10导致每次查找0.0778微秒.现在测量页面的加载速度并比较它们(或者,只是思考在构建页面时你实际完成的工作需要多长时间); 并考虑缓存,框架开销和所有这些事情.

在这方面你没有做任何事情可以在表现方面,时期,完全停止.