OrderedDict实现FIFODict

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

 1 from collections import OrderedDict
 2 
 3 class LastUpdatedOrderedDict(OrderedDict):
 4 
 5     def __init__(self, capacity):
 6         super(LastUpdatedOrderedDict, self).__init__()
 7         self._capacity = capacity
 8 
 9     def __setitem__(self, key, value):
10         containsKey = 1 if key in self else 0
11         if len(self) - containsKey >= self._capacity:
12             last = self.popitem(last=False)
13             print('remove:', last)
14         if containsKey:
15             del self[key]
16             print('set:', (key, value))
17         else:
18             print('add:', (key, value))
19         OrderedDict.__setitem__(self, key, value)

对于廖大佬的本操作的官方实例代码的第11行,开始很迷惑

为什么要用容器目前长度去减去containsKey(待添加Key指是否已在字典中标志)呢?(而不是len(self)+1>=   当然此种做法也可以)

后面把代码在脑海里跑了一遍,就很好理解了

1.如果containsKey==1(待添加Key已经在字典里),那么如果字典已经满了,自然11行判断为false。

而后交给第15行进行处理,现将已有的键值对进行删除,然后把键值对再进行添加(相当于后移key,修改value)

2.如果contas==0,那么自然满了的话,11行判断为true,进而进行后续操作

 

posted @ 2020-07-20 16:56  饼先生  阅读(59)  评论(0编辑  收藏