欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

先进先出的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]