在Python中为字典键命名以实现快速查找

8 投票
5 回答
2185 浏览
提问于 2025-04-16 19:36

我有一个小字典(大约有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

也就是说,没有差别...

我的 代码

撰写回答