如何在python中插入字典字符串键?

2024-04-25 17:55:05 发布

您现在位置:Python中文网/ 问答频道 /正文

读后,实习字符串可以帮助性能。我是否只存储系统实习生把字典当作钥匙,就这样?你知道吗

t = {}
t[sys.intern('key')] = 'val'

谢谢


Tags: key字符串字典sysval性能钥匙存储系统
1条回答
网友
1楼 · 发布于 2024-04-25 17:55:05

是的,你就这样用。你知道吗

为了更具体地说明性能,the doc指出:

Interning strings is useful to gain a little performance on dictionary lookup – if the keys in a dictionary are interned, and the lookup key is interned, the key comparisons (after hashing) can be done by a pointer compare instead of a string compare.

(经典的)dict查找有两个步骤:1。将对象散列为一个数字,该数字是存储数据的数组中的索引;2。迭代此索引处的数组单元格,以找到具有正确键的一对(键、值)。你知道吗

通常,第二步是合理快速的,因为我们选择了一个哈希函数来确保很少的冲突(不同的对象-相同的哈希)。但它仍然需要检查您要查找的密钥与具有相同散列的每个存储密钥。这是更快的第2步:在对字符串相等性进行昂贵的逐字符测试之前,先测试字符串标识。你知道吗

第1步更难加速,因为可以将哈希值与插入的字符串一起存储。。。但是你必须计算散列才能找到插入的字符串本身。你知道吗

这是理论!如果你真的需要提高性能,首先做一些基准测试。你知道吗

然后想想这个领域的特殊性。您正在将IPv4地址存储为密钥。IPv4地址是介于0和256^4之间的数字。如果用整数替换对人友好的地址表示,则会得到更快的哈希(如果几乎没有成本,则在CPython中对小数字进行哈希:https://github.com/python/cpython/blob/master/Python/pyhash.c)和更快的查找。在您的情况下,^{} module可能是最好的选择。你知道吗

如果您确定地址在边界之间(例如172.16.0.0–172.31.255.255),则可以尝试使用数组而不是dict。除非您的数组很大(磁盘交换),否则应该更快。你知道吗

最后,如果速度不够快,请准备使用速度更快的语言。你知道吗

相关问题 更多 >