用OrderedDict实现一个FIFO的dict,当容量超出限制的时候,先删除最先添加的key
来源:互联网 发布:欧莱雅精油怎么样知乎 编辑:程序博客网 时间:2024/05/29 15:16
#!\usr\bin\python# coding=utf-8from collections import OrderedDictclass LastUpdateOrderDict(OrderedDict): def __init__(self, capacity): super(LastUpdateOrderDict, self).__init__() '''是对继承自父类的属性进行初始化。而且是用父类的初始化方法来初始化继承的属性。 例如这样,父类对name和gender的初始化只是简单的赋值, 但子类要求字母全部大写。 ''' self._capacity = capacity #init方法在父类OrderedDict的__init__方法基础上,为LastUpdatedOrderedDict类添加了一个_capacity属性 def __setitem__(self, key, value): # containsKey=1时表示key已存在,则执行修改操作 # containsKey=0时表示key不存在,则执行添加操作 containskey = 1 if key in self else 0 # 当已达最大容量,当新加key不存在时,会运行这段,先删除最先添加的 # 当key存在时,不会运行这段,会运行第2个if进行修改 if len(self) - containskey >= self._capacity: last = self.popitem(last=False) # popitem移除键值对并返回,last=true时按LIFO顺序返回 # last=false时按FIFO顺序返回 print 'remove', last if containskey: del self[key] print 'set:', (key, value)else:#key值不在里面 print 'add', (key, value) OrderedDict.__setitem__(self, key, value) # 调用父类的__setitem__方法写入键值对m_od = LastUpdateOrderDict(2)# 容量为2,输入3个值时,会先将最先存入的删除再添加新的m_od['a'] = 1m_od['b'] = 2m_od['c'] = 3print(m_od)结果:E:\Python27\python.exe E:/PycharmProjects/file/.idea/thecollectionsfile.pyadd ('a', 1)add ('b', 2)remove ('a', 1)add ('c', 3)LastUpdateOrderDict([('b', 2), ('c', 3)])出现的问题:1,我开始将文件名字命名为collections.py ,结果在from collections import OrderedDict导入包时出错了提示:无法导入包因为文件名和模块名字重复,将名字改成其他的之后,就可以导入了2,为什么要在此处写if containskey: del self[key] print 'set:', (key, value)因为如果你del的话,再次添加的时候,就只是update,打印的时候,键值对是在前面的这是一个有序的字典,并且要后插入的键值对位于后面,如果不del key,在__setitem__的时候,只会更新原来的数组,此处要del key 打乱之前的结构,再进行键对值的插入
阅读全文
0 0
- 用OrderedDict实现一个FIFO的dict,当容量超出限制的时候,先删除最先添加的key
- 定义一个Object类型的数组,初始容量为10,当添加到第十个元素的时候,数组的长度扩展为原来的两倍
- js代码,当div中内容高度超出div高度的时候实现定制滚动条!
- 先进先出(FIFO)链表的实现
- tomcat 上传超出限制的大文件的时候,无响应,服务器端有限制大小
- 一个FIFO pipe的简单Java实现
- when adding column with default value ,当添加一个有默认值的列的时候
- 当内容超出最大的长度的时候,使用CSS使文本显示省略号
- python dict.get()和dict['key']的使用
- python中OrderedDict的使用
- python的dict实现
- 安装到真机上面的时候需要申请另外一个key,发布用的key
- FIFO的实现
- 管道,FIFO的实现
- FIFO的FPGA实现
- FIFO的FPGA实现
- dict和set的key不可变
- access复制粘贴的时候显示溢出(超出9500条限制)解决办法
- 正则表达式
- 1164 小A点菜
- Java 邮件发送系统 -- JAVA 进阶
- NoSuchBeanDefinitionException
- 递归找最大的数
- 用OrderedDict实现一个FIFO的dict,当容量超出限制的时候,先删除最先添加的key
- spring aop的最简单的例子
- unity小技巧
- java设计模式(六)——装饰模式
- JAVA易错
- SpringMVC学习
- 【LINUX】文件权限
- Codefrces 869C. The Intriguing Obsession
- JavaScriptDOM对象练习 tab栏切换