Python学习笔记之先进先出的OrderedDict示例

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]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值