• OrderedDict实现FIFODict


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

  • 相关阅读:
    深入理解协程(三):async/await实现异步协程
    AES中ECB模式的加密与解密(Python3.7)
    深入理解协程(二):yield from实现异步协程
    系统结构实践期末大作业
    第7次实践作业
    第6次实践作业
    第5次实践作业
    第4次实践作业
    第3次实践作业
    第2次实践作业
  • 原文地址:https://www.cnblogs.com/Mr-BING/p/13346012.html
Copyright © 2020-2023  润新知