OrderedDict实现FIFO

OrderedDict可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key:

#!/usr/bin/env python
#-*- coding: utf8 -*-
from collections import OrderedDict

class LastUpdatedOrderedDict(OrderedDict):

    def __init__(self, capacity):
        #super(LastUpdatedOrderedDict, self).__init__()
        OrderedDict.__init__(self)#注意这里有self
        self._capacity = capacity

    def __setitem__(self, key, value):
        containsKey = 1 if key in self else 0
        if len(self) - containsKey >= self._capacity:
            last = self.popitem(False)
            print ‘remove:‘, last
        if containsKey:
            del self[key]
            print ‘set:‘, (key, value)
        else:
            print ‘add:‘, (key, value)
        super(LastUpdatedOrderedDict, self).__setitem__(key, value)
        #OrderedDict.__setitem__(self, key, value)

FIFO = LastUpdatedOrderedDict(5)
FIFO.__setitem__(‘huangyi‘, ‘lz‘)
FIFO.__setitem__(1, 1)
FIFO.__setitem__(2, 2)
FIFO.__setitem__(3, 3)
FIFO.__setitem__(4, 4)

super(LastUpdatedOrderedDict, self).__init__()等价于OrderedDict.__init__(self),super返回LastUpdatedOrderedDict的父类OrderedDict。注意前面参数不带self,后面参数带self。

last = self.popitem(False)的popitem不带参数(或带True)时返回最后一个元素,带参数False时返回第一个元素。

References

[1].https://docs.python.org/3/library/stdtypes.html?highlight=popitem#dict.popitem

[2].http://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035005.html

时间: 2024-10-13 16:47:10

OrderedDict实现FIFO的相关文章

OrderedDict

OrderedDict 使用dict时,Key是无序的.在对dict做迭代时,我们无法确定Key的顺序. 如果要保持Key的顺序,可以用OrderedDict: >>> from collections import OrderedDict >>> d = dict([('a', 1), ('b', 2), ('c', 3)]) >>> d # dict的Key是无序的 {'a': 1, 'c': 3, 'b': 2} >>> od

python模块介绍- collections(5)-OrderedDict 有序字典

1.3.5 OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序. import collections print 'Regular dictionary:' d = {} d['a'] = 'A' d['b'] = 'B' d['c'] = 'C' for k, v in d.items(): print k, v print '\nOrderedDict:' d = collections.OrderedDict() d['a'] = 'A' d

python之collections之有序字典(OrderedDict)

一.定义OrderedDict是对字典的补充,它记住了字典元素的添加顺序.eg: 二.OrderedDict相关方法def clear(self): # real signature unknown; restored from __doc__ """ od.clear() -> None. Remove all items from od. 清除有序字典中的元素 """ passeg: def copy(self): # real sig

python的collection系列-有序字典(OrderedDict)

orderdDict是对字典类型的补充,他记住了字典元素添加的顺序 注意:字典默认循环只输出key 1 import collections 2 dic = collections.OrderedDict() 3 dic["k1"] = "v1" 4 dic["k2"] = "v2" 5 dic["k3"] = "v3" 6 print(dic) 7 #实现原理:相当于用列表(有序)来维

Python OrderedDict使用

一.最近最少使用实现: import collections class LRUDict(object): ''' 最近最少使用队列实现,最近使用的键值放后面 ''' def __init__(self,dict_list,size): self.ordered_dict = collections.OrderedDict(dict_list) self.size = size def get(self,key): if key in self.ordered_dict: value = sel

操作系统 页面置换算法LRU和FIFO

LRU(Least Recently Used)最少使用页面置换算法,顾名思义,就是替换掉最少使用的页面. FIFO(first in first out,先进先出)页面置换算法,这是的最早出现的置换算法.该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最长的页面给予淘汰. FIFO置换算法有这样一个奇怪现象:内存空间块数越多,缺页中断率可能相反的越高(缺页中断次数越高). LFU(Least Frequently Used)最近最少使用算法,它是基于“如果一个数据在最近一段时间内使用次

命名管道(FIFO)

一.命名管道:两个不相关的进程通过一个路径名关联,即,只要可以访问该路径,就能实现进程间的通信(先入先出). 二.创建函数原型:int mkfifo(const char*path, mode_t mode);    //成功返回0,失败返回-1 三.代码实现: //write端 #include<stdio.h> #include<sys/types.h> #include<sys/stat.h> #include<unistd.h> #include&l

进程间通信IPC-命名管道FIFO

FIFO又被称为命名管道,未命名的管道只能在两个相关的进程之间使用,而这两个相关的进程还要有一个共同创建了它们的祖先进程,但是FIFO,不相关的进程之间也能交换数据. FIFO是一种文件类型.通过stat结构的st_mode成员的编码可以知道文件是否是FIFO类型,在linux下查看自己创建的FIFO文件: 创建FIFO类似于创建文件,也存在于文件系统之中.定义如下: #include <sys/stat.h> int mkfifo(const char* path, mode_t mode)

第4章 管道和FIFO

4.1 管道 管道是由pipe函数创建的,提供一个单向数据流. 头文件 #include <unistd.h> 函数原型 int pipe(int fd[2]); 返回值 成功则为0,出错则为-1 函数功能 该函数返回两个文件描述符:fd[0]和fd[1].fd[0]用来读操作,fd[1]用来写操作 说明 管道只能用于有亲缘关系进程间通讯.要实现非亲缘关系进程间通讯用有名管道FIFO 4.2 管道实现半双工通讯 实现的步骤: (1)创建管道(fd[0]和fd[1]) (2)fork (3)父进