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,进而进行后续操作