普通字典善于隐射,其次追踪插入顺序。而 orderdict 更善于后者。因为 orderdict 内部维护了一个双向链表,大小会是普通字典的两倍。

增加方法:

popitem(last=True)

  移除并返回一个键值对,last=True 时,后进先出,反之,先进先出。

move_to_end(key, last=True)

  last=True时,将键值对移至最右。反之,移至最左。key不存在时,抛错 KeyError。

应用:

记录最后一次操作的键值对:

class LastUpdatedOrderedDict(OrderedDict):
'Store items in the order the keys were last added' def __setitem__(self, key, value):
super().__setitem__(key, value)
super().move_to_end(key)

限制记录大小,当记录数超出时,删除最少查找的key:

class LRU(OrderedDict):
'Limit size, evicting the least recently looked-up key when full' def __init__(self, maxsize=128, *args, **kwds):
self.maxsize = maxsize
super().__init__(*args, **kwds) def __getitem__(self, key):
value = super().__getitem__(key)
self.move_to_end(key)
return value def __setitem__(self, key, value):
super().__setitem__(key, value)
if len(self) > self.maxsize:
oldest = next(iter(self))
del self[oldest]

最新文章

  1. springboot(八):RabbitMQ详解
  2. TF Boys (TensorFlow Boys ) 养成记(四)
  3. SpringMVC Controller 返回值的可选类型
  4. jboss服务器配置多实例
  5. php 图片调整大小 封装类【转载】
  6. 《C#并行编程高级教程》第6章 PLINQ:声明式数据并行 笔记
  7. onSubmit的使用
  8. bzoj1208 [HNOI2004]宠物收养所(STL,Treap)
  9. apache 启动不了
  10. (原)Ubuntu14中安装GraphicsMagick
  11. Angular - - ngHref、ngSrc、ngCopy/ngCut/ngPaste
  12. java 继承的学习(转)
  13. 201521123027 <java程序设计>第八周学习总结
  14. Micropython TPYBoard 智能温控小风扇资料分享
  15. android自定义viewgroup初步之一----抽屉菜单
  16. 学会这15点,让你分分钟拿下Redis数据库
  17. dirlock_windows.go
  18. Qt代码
  19. .NET 通过entity framework报数据库连接错误:ORA-01017: invalid username/password; logon denied
  20. loadrunner 运行脚本-Run-time Settings->General->Additional attributes设置

热门文章

  1. Java oop第05章_多态、接口
  2. Repeater 分页
  3. Yii2 中使用ts
  4. duilib教程之duilib入门简明教程16.结合win32和MFC
  5. 牛客多校第四场 I string 后缀自动机/回文自动机
  6. 云-腾讯云-笔记:pom.xml 配置
  7. npm使用入门
  8. Mysql配置innodb_flush_log_at_trx_commit
  9. python3爬虫lxml模块的安装
  10. Python调用DLL动态链接库——ctypes使用