# This could much more completely be done as a subclass of dict, but for # brevity we'll just define it like this for now. class FifoCache: ''' A mapping(ish) object that remembers the past items set. ''' def __init__(self, entries): self.entries = entries self.dct = {} self.lst = [] self.__repr__ = self.dct.__repr__ self.__contains__ = self.dct.__contains__ self.__getitem__ = self.dct.__getitem__ def __setitem__(self, key, value): dct = self.dct lst = self.lst if key in self: del self[key] lst.append(key) dct[key] = value if len(lst) > self.entries: del dct[lst.pop(0)] def __delitem__(self, key): if not self.dct.has_key(key): raise KeyError, key self.lst.remove(key) self.dct.pop(key) # f = FifoCache(entries = 3) # f["fly"] = "foo" # f["moo"] = "two" # f["bar"] = "baz" # f["dave"] = "wilson" # f["age"] = 20 # f now has keys 'bar', 'dave', and 'age'.