有序字典。
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指针。
测试覆盖率
测试覆盖率报告摘要:
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
- 可与其他版本(未经测试)一起使用