Python的HAT-Trie
项目描述
hat-trie
Python (2.x和3.x) 的HAT-Trie结构。
此软件包是hat-trie C库的Python包装器。
安装
pip install hat-trie
使用
创建一个新的trie
>>> from hat_trie import Trie >>> trie = Trie()
变量 trie 是一个类似于字典的对象,支持Unicode键,可以以任何Python对象作为值。对于共享前缀的键,它通常比Python字典使用更少的内存。
还有一个 hat_trie.IntTrie,它只支持正整数作为值。当您不需要任意对象作为值时,它可以更有效。例如,如果您需要存储浮点值,那么将它们存储在数组(无论是numpy还是stdlib的 array.array)中,并使用IntTrie值作为索引,可能比直接在 hat_trie.Trie 中存储Python浮点对象更节省内存。
另一种存储浮点值的方法是使用 hat_trie.FloatTrie()。在这种情况下,精度限制为float32。
当前实现的方法包括
__getitem__()
__setitem__()
__contains__()
__len__()
get()
setdefault()
keys()
iterkeys()
其他方法尚未实现 - 欢迎贡献!
性能
性能是在100k个独特的Unicode单词(英语和俄语)作为键,以及‘1’数字作为值的情况下,针对 hat_trie.Trie 与Python的dict进行比较的。
Python 3.3 的基准测试结果(Intel i5 1.8GHz,"1.000M ops/sec" 等于 "1,000,000 次操作/秒")
dict __getitem__ (hits) 6.874M ops/sec trie __getitem__ (hits) 3.754M ops/sec dict __contains__ (hits) 7.035M ops/sec trie __contains__ (hits) 3.772M ops/sec dict __contains__ (misses) 5.356M ops/sec trie __contains__ (misses) 3.364M ops/sec dict __len__ 785958.286 ops/sec trie __len__ 574164.704 ops/sec dict __setitem__ (updates) 6.830M ops/sec trie __setitem__ (updates) 3.472M ops/sec dict __setitem__ (inserts) 6.774M ops/sec trie __setitem__ (inserts) 2.460M ops/sec dict setdefault (updates) 3.522M ops/sec trie setdefault (updates) 2.680M ops/sec dict setdefault (inserts) 4.062M ops/sec trie setdefault (inserts) 1.866M ops/sec dict keys() 189.564 ops/sec trie keys() 16.067 ops/sec
HAT-Trie 在所有支持的运算上比 datrie 快约 1.5 倍;它还支持快速插入,而 datrie 不支持。另一方面,datrie 有更多功能(例如,更好的迭代支持和更丰富的 API);datrie 还更节省内存。
如果您需要一个内存高效的数据结构,并且不需要插入操作,那么 marisa-trie 或 DAWG 应该更适用。
贡献
开发在 github 上进行
请随意提交想法、错误、pull request 或常规补丁。
请勿提交生成的 C 文件更改;我将自己重新构建它们。
运行测试和基准测试
确保已安装并运行 tox,并在源代码检出处运行
$ ./update_c.sh $ tox
需要 Cython 来完成此操作。
在 python 2.7 和 3.3+ 下测试应该可以通过。
$ tox -c bench.ini
运行基准测试。
许可证
许可协议为 MIT 许可。
0.3 (2016-02-08)
hat-trie C 库已更新到最新版本(感谢 Michael Phan-Ba);
FloatTrie(感谢 Michael Phan-Ba);
已放弃对 Python 2.6 和 Python 3.2 的支持。hat-trie 0.3 很可能在 2.6 和 3.2 中仍然可用,但不再通过单元测试进行检查,并且不保证未来的兼容性;
setup.py 已切换到 setuptools。
0.2 (2014-08-22)
安装简化了:不再需要 Cython;
get 方法用于 trie(感谢 Brandon Forehand);
iterkeys 方法已修复(感谢 Brandon Forehand);
hat_trie.Trie 可以存储任何 Python 对象作为值(感谢 Brandon Forehand);
修复了大整数值导致的 segfault(感谢 Brandon Forehand);
hat-trie C 库已更新到最新版本,以修复与 64 位构建和 RHEL 相关的一些问题(感谢 Brandon Forehand 和 Michael Heilman);
0.1 (2014-03-27)
初始发布。
项目详情
哈希 对于 hat_trie-0.3-cp35-cp35m-macosx_10_11_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b8103cb0c814e5fbb4dfa3704daf4c06299abf9e19edec0f1a4e4e0c1fe7cdd4 |
|
MD5 | a358d0e5d25032e15193ae1b3a1e9f43 |
|
BLAKE2b-256 | 265f488ea9e2cfdfa84530b6eb04179148c425a297c7f9d94e17d9fbf2d3a63a |
哈希 对于 hat_trie-0.3-cp27-none-macosx_10_10_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fa9b0ba04a76c9d30c9a057405ae2475acdd8e30dcc1debee38d1342606afad2 |
|
MD5 | 136f1ef8e1f36693e38e8b3635001a86 |
|
BLAKE2b-256 | ba59dbd9b096cd80468b500137d3c56c6840ca9fd29fd163c0ad294034255396 |