是否有一种数据结构的行为类似于"buffer dictionary"?



我需要一种行为类似于字典的数据结构(可以通过键访问/删除任何元素),但也具有以下属性:

  • 最多可以容纳 N 个元素(实际上,N 以数百、数千为单位)。
  • 该结构包含每次访问(获取/设置/删除)递增的最后一个操作编号。
  • 元素的上次访问被跟踪 - 每当添加或访问项目时,操作编号都会与结构中的该项目一起保存。
  • 如果要添加新项,并且结构包含最大数量的元素,则会删除操作编号最低的元素(上次访问时间很久以前,在所有其他元素的上次访问之前),并插入新元素。

我使用这样的结构来维护对象的缓存 - 检索每个元素非常耗时,并且非常频繁地访问有限数量的元素。如果该元素不再经常使用,它最终将落在此缓存的底部,并在下次插入此结构时替换。

我目前的实现(在 Python 3 中)是一个字典,其中包含最后一个访问号码和对象本身的键 ->元组。它运行良好,但我几乎可以肯定我在某处看到了非常相似的结构 - 是否有任何行为类似于这样的缓存?

据我所知,没有本机数据结构表现为这种"缓存"。

CircularDict 满足您的第一个要求(设置它可以存储的最大元素或内存数),部分满足最后一个要求(添加新元素时,如果已满,将删除最旧的插入元素)。但它基于您的看跌设置操作的顺序。目前,它没有考虑到得到

from circular_dict import CircularDict
# Initialize a CircularDict with a maximum length of 3
my_cache = CircularDict(maxlen=3)
# Fill it with 4 items (one more than maxlen)
my_cache['1'] = 'value1'
my_cache['2'] = 'value2'
my_cache['3'] = 'value3'
my_cache['4'] = 'value4'
print(circ_dict)

输出将如下所示:

{'2': 'value2', '3': 'value3', '4': 'value4'} 

最新更新