有序字典。

odict的Python项目详细描述


修改

保留项目插入顺序的字典(使用 内部双链接列表)。在这个实现中替换现有的 物品保持在原来的位置。

内部表示:dict的值。

[pred_key,val,succ_key]

元素序列用作双链接列表。 链接是dict 钥匙。 self.lh self.lt 是第一个和最后一个元素的键 插入ODICT。

动机

创建此包时, collections.ordereddict 尚未存在。

另一个问题是, dict 不能总是一起继承 和其他基类。这可能导致实例布局冲突或其他 错误。因此, odct 的编写方式可以让您修改字典 易于基本实现。

性能(python 3.4)

运行基准测试脚本时,会得到与上的结果类似的结果 最新的通用硬件。

添加和删除内置对象 <表> < COLGROUP > < COL/> < COL/> <正文> 加1000 0.63800ms 删除1000 0.36900ms 添加10000 57.46亿秒 删除10000 3.97000毫秒 添加100000 69.40600毫秒 删除100000 47.30000ms 添加1000000 807.09100ms 删除1000000 495.33400毫秒 <表>

添加和删除 collection.ordereddict 对象

<表> < COLGROUP > < COL/> < COL/> <正文> 加1000 8.15200毫秒 删除1000 0.50800ms 添加10000 91.45800ms 删除10000 7.10200毫秒 添加100000 982.35500毫秒 删除100000 71.02300毫秒 添加1000000 10222.78300毫秒 删除1000000 715.35100ms <表>

添加和删除此软件包提供的对象 <表> < COLGROUP > < COL/> < COL/> <正文> 加1000 46.75600毫秒 删除1000 0.35700ms 添加10000 23.97900ms 删除10000 4.79100毫秒 添加100000 276.15900毫秒 删除100000 49.02700ms 添加1000000 3244.68600毫秒 删除1000000 539.16500毫秒 <表>

关系 <表> < COLGROUP > < COL/> < COL/> <正文> 创建1000个对象 1:73.285 删除1000个对象 1:0.967 创建10000个对象 1:4.173 删除10000个对象 1:1.207 创建100000个对象 1:3.979 删除100000个对象 1:1.037 创建1000000个对象 1:4.020 删除1000000个对象 1:1.088 <表>

关系 <表> < COLGROUP > < COL/> < COL/> <正文> 创建1000个对象 1:5.736 删除1000个对象 1:0.703 创建10000个对象 1:0.262 删除10000个对象 1:0.675 创建100000个对象 1:0.281 删除100000个对象 1:0.690 创建1000000个对象 1:0.317 删除1000000个对象1:0.754 <表>

用法

导入并创建有序字典。

fromodictimportodictod=odict()

类型转换为普通类型。这将失败。

>>> dict(odict([(1,1)])){1: [nil, 1, nil]}

原因如下->; http://bugs.python.org/issue1615701

dict的函数检查arg是否是dict的子类, 并忽略覆盖的getitem(如果有)。 &co

由于pickle 的行为问题,这个问题被修复并随后恢复。

使用下列方法之一进行类型转换。

>>> dict(odict([(1,1)]).items()){1: 1}

>>> odict([(1,1)]).as_dict(){1: 1}

可以使用抽象mixin类来钩住另一个dict基 实施。这在坚持使用zodb时很有用。继承自 dict persistent 同时失败。

frompersistent.dictimportPersistentDictclasspodict(_odict,PersistentDict):def_dict_impl(self):returnPersistentDict

其他

在这个数据结构的c重新实现中,事情可以简化 (加速)如果给定一个值,你可以同时找到它的键。 这样,您就可以使用普通的c指针。

测试覆盖率

https://travis-ci.org/bluedynamics/odict.svg?branch=master

测试覆盖率报告摘要:

Name                    Stmts   Miss  Cover
-------------------------------------------
src/odict/__init__.py       1      0   100%
src/odict/pyodict.py      320      0   100%
src/odict/tests.py        280      0   100%
-------------------------------------------
TOTAL                     601      0   100%

python版本

  • python 2.6+、3.2+、pypy
  • 可与其他版本(未经测试)一起使用

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Camera API如何聚焦图像中多边形的中心?   来自Java的spring Filling邮戳模板   java只能编织本地JAR的方面吗?   javajavax。加密。BadPaddingException:解密错误无法解密加密的公钥   从java运行ansibleplaybook   在Java中,如何从不同的偏移量读取大块的字符串文件?   java Android GridView将无法确定正确的位置   executorservice如何使用自动线程管理在Java中实现生产者/消费者   JavaEJB3.1嵌入式API单元测试EJB+JPA实体   API的java输出自动停止   java Checkmarx缺陷解决方案   java缓存,获取最早的元素   WebSphere8中的JavaEJB问题   两个时区之间的java Jodatime时差   Java 8不兼容类型错误   java TableCellEditor:如果按下该键,则清除原始文本;如果没有输入,则保留值