在Python中为字典键命名以实现快速查找
我有一个小字典(大约有5到20个键),在一次页面加载中会被查找大约一百次,使用的是Python 2.5。
我开始给这些键命名了,想知道有没有什么命名规则可以帮助提高字典查找的速度。
5 个回答
2
因为Python的字符串哈希函数会逐个字符地处理字符串(至少如果这个说法还适用的话),所以我会选择使用短一些的字符串。
6
可能会有一些合理的名字,恰好能产生不会冲突的哈希值。但是,CPython 的字典已经是宇宙中最优化的数据结构之一,通常情况下产生的冲突非常少,能很好地与其他内置类型的哈希方案配合,解决冲突的速度也很快等等。即使你找到了什么,看到任何好处的可能性也是极小的,尤其是因为一百次查找其实并不算多。
举个例子,这是我在一台四年旧的台式机上进行的 timeit 基准测试(这台机器配备了一个预算非常低的双核 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
而这些字符串的长度是手动输入一个合理的变量名的十几倍。将长度从 100 减少到 10,每次查找的时间变成了0.0778 微秒。现在测量一下你页面的加载速度,并进行比较(或者,想想你在构建页面时实际工作的时间有多长);还要考虑缓存、框架开销以及所有这些因素。
在这方面你所做的任何事情都不会对性能产生影响,结束。
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
也就是说,没有差别...
我的 代码