Pythonノート21-廖雪峰ウェブサイト学習小ノート(整理せず、自分の雑収録のみ)
常用内蔵モジュール編
1.collections
OrderedDictは、FIFO(先行先出)のdictを実現することができ、容量が制限を超えた場合、最初に追加したKeyを削除します.
このコードは2つのことをしました
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)