跳转到主要内容

Python的HAT-Trie

项目描述

hat-trie

Python (2.x和3.x) 的HAT-Trie结构。

此软件包是hat-trie C库的Python包装器。

https://travis-ci.org/kmike/hat-trie.svg?branch=master

安装

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-trieDAWG 应该更适用。

贡献

开发在 github 上进行

请随意提交想法、错误、pull request 或常规补丁。

请勿提交生成的 C 文件更改;我将自己重新构建它们。

运行测试和基准测试

确保已安装并运行 tox,并在源代码检出处运行

$ ./update_c.sh
$ tox

需要 Cython 来完成此操作。

在 python 2.7 和 3.3+ 下测试应该可以通过。

$ tox -c bench.ini

运行基准测试。

作者 & 贡献者

此模块封装了 Daniel Jones 和贡献者编写的 hat-trie C 库。

许可证

许可协议为 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.tar.gz (79.9 kB 查看哈希值)

上传时间 源代码

构建的分发

hat_trie-0.3-cp35-cp35m-macosx_10_11_x86_64.whl (48.6 kB 查看哈希值)

上传时间 CPython 3.5m macOS 10.11+ x86-64

hat_trie-0.3-cp27-none-macosx_10_10_x86_64.whl (48.6 kB 查看哈希值)

上传于 CPython 2.7 macOS 10.10+ x86-64

由以下支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面