先进先出的OrderedDict示例
程序员文章站
2022-03-14 11:22:01
...
from collections import OrderedDict
class LastUpdatedOrderedDict(OrderedDict):
def __init__(self, capacity):
super(LastUpdatedOrderedDict,self).__init__(self)
self._capacity = capacity
def __setitem__(self, key, value):
containsKey = 1 if key in self else 0
if len(self) - containsKey >= self._capacity:
last = self.popitem(last=False)
print('remove: ', last)
if containsKey:
del self[key]
print('set: ', (key, value))
else:
print('add: ', (key, value))
OrderedDict.__setitem__(self, key, value)
if __name__ == '__main__':
luod = LastUpdatedOrderedDict(10)
for i in range(20):
luod['key{}'.format(i)] = i
print(luod)
print(list(luod.keys()))
print(list(luod.values()))
输出结果:
add: ('key0', 0)
add: ('key1', 1)
add: ('key2', 2)
add: ('key3', 3)
add: ('key4', 4)
add: ('key5', 5)
add: ('key6', 6)
add: ('key7', 7)
add: ('key8', 8)
add: ('key9', 9)
remove: ('key0', 0)
add: ('key10', 10)
remove: ('key1', 1)
add: ('key11', 11)
remove: ('key2', 2)
add: ('key12', 12)
remove: ('key3', 3)
add: ('key13', 13)
remove: ('key4', 4)
add: ('key14', 14)
remove: ('key5', 5)
add: ('key15', 15)
remove: ('key6', 6)
add: ('key16', 16)
remove: ('key7', 7)
add: ('key17', 17)
remove: ('key8', 8)
add: ('key18', 18)
remove: ('key9', 9)
add: ('key19', 19)
LastUpdatedOrderedDict([('key10', 10), ('key11', 11), ('key12', 12), ('key13', 13), ('key14', 14), ('key15', 15), ('key16', 16), ('key17', 17), ('key18', 18), ('key19', 19)])
['key10', 'key11', 'key12', 'key13', 'key14', 'key15', 'key16', 'key17', 'key18', 'key19']
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
上一篇: jQuery实现获取动态添加的标签对象
下一篇: C++之queue容器使用