zoukankan      html  css  js  c++  java
  • 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,进而进行后续操作

  • 相关阅读:
    P1486 [NOI2004]郁闷的出纳员
    P1966 火柴排队
    P2627 修剪草坪
    P1621 集合
    P1025 数的划分
    中国剩余定理
    P2043 质因子分解
    P1075 质因数分解
    C#之引用类型参数
    C#之方法的定义及调用学习案例
  • 原文地址:https://www.cnblogs.com/Mr-BING/p/13346012.html
Copyright © 2011-2022 走看看