需要python字典表现得像deque(有最大长度)

时间:2018-03-14 09:38:21

标签: python python-3.6

是否有任何内置(或非常简单)的方法让python字典以与deque类似的方式工作。

我需要它具有最大大小,并且当添加新密钥时,如果达到最大长度,则删除首先添加的密钥。作为自定义类实现起来应该不会太难,但总是首选使用内置函数。

如果有任何帮助,我正在使用Python 3.6。

2 个答案:

答案 0 :(得分:6)

这听起来像是OrderedDict的变体。

class FixSizeOrderedDict(OrderedDict):
    def __init__(self, *args, max=0, **kwargs):
        self._max = max
        super().__init__(*args, **kwargs)

    def __setitem__(self, key, value):
        OrderedDict.__setitem__(self, key, value)
        if self._max > 0:
            if len(self) > self._max:
                self.popitem(False)

答案 1 :(得分:4)

听起来你想要一个最近最少使用(LRU)的缓存。

functools.lru_cache decorator可能对您有用。如果您想要更多控制权,请查看包pylru或仅使用Google Python LRU缓存。