Есть ли какой-нибудь встроенный (или очень простой) способ заставить словарь Python работать аналогично deque.

Мне нужно, чтобы он имел максимальный размер, и при добавлении новых ключей, если достигнута максимальная длина, то первый добавленный ключ удаляется. Это не должно быть слишком сложно для реализации как пользовательский класс, но использование встроенных всегда предпочтительнее.

Я использую Python 3.6, если это может помочь.

8
Yngve Moe 14 Мар 2018 в 12:38

2 ответа

Лучший ответ

Это звучит как вариант 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)
7
Sraw 14 Мар 2018 в 10:30

Звучит так, как будто вы хотите использовать кеш в наименьшем количестве (LRU).

Вам может быть полезен декоратор functools.lru_cache. Если вам нужен больший контроль, проверьте пакет pylru или просто кеш LRU Google Python.

4
Alex Hall 14 Мар 2018 в 09:45