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