from collections import UserDict, deque class CircularDict(UserDict): def __init__(self,init_data = None, max_len = 50): self.data = init_data if init_data is not None else dict() self.fkkeys = deque(self.data.keys(), max_len) self.max_len = max_len def __setitem__(self, k,v): self.fkkeys.append(k) self.data[k] = v to_rem = self.data.keys() - set(self.fkkeys) [self.data.pop(k) for k in to_rem]