Pythonノート21-廖雪峰ウェブサイト学習小ノート(整理せず、自分の雑収録のみ)


常用内蔵モジュール編
1.collections
OrderedDictは、FIFO(先行先出)のdictを実現することができ、容量が制限を超えた場合、最初に追加したKeyを削除します.
OrderedDict      FIFO(    ) dict,        ,        Key:

from collections import OrderedDict

class LastUpdatedOrderedDict(OrderedDict):

def __init__(self, capacity):
    super(LastUpdatedOrderedDict, self).__init__() #             
    self._capacity = capacity

def __setitem__(self, key, value):
    containsKey = 1 if key in self else 0#   key    
    if len(self) - containsKey >= self._capacity:#       
        last = self.popitem(last=False)#last=False:    。 last=True:    
          # popitem()     :                ( )
         # popitem()     ,    dict       
        print 'remove:', last
    if containsKey:
        del self[key]
        print 'set:', (key, value) #   key value
    else:
        print 'add:', (key, value)
    OrderedDict.__setitem__(self, key, value)#    

このコードは2つのことをしました
init     OrderedDict __init__     , LastUpdatedOrderedDict      _capacity  

setitem     LastUpdatedOrderedDict    key   ,         ;          :

      , pop      Key
     key,   

     key,   

     containsKey        ,           Key flag,                  (         ,setitem  dict     ,      key,dict  +1)
      
def __setitem__(self, key, value):
    if key in self:
        del self[key]
        print 'set:', (key, value)
    else: 
        if len(self) == self._capacity: 
                last = self.popitem(last=False)
                print 'remove:', last
        print 'add:', (key, value)
    OrderedDict.__setitem__(self, key, value)