使用 @AshwiniChaudhary__setitem__
评论中提到的 dunder 方法。但是,您需要区分覆盖和设置新密钥。
from collections import OrderedDict
class limitedDict(OrderedDict):
def __init__(self, length):
OrderedDict.__init__(self)
self.length = length
def __setitem__(self, key, value):
if key not in self and len(self) >= self.length:
raise RuntimeWarning("Dictionary has reached maximum size.")
# Or do whatever else you want to do in that case
else:
OrderedDict.__setitem__(self, key, value)
请注意,虽然该update
方法还允许添加新键,但它__setitem__
在后台调用,如评论中所述。
如果字典超过了您可能想要的最大大小,self.popitem(last=False)
直到它匹配长度(last=False
对于 FIFO 顺序,last=True
对于 LIFO 顺序,默认值)。