Python OrderedDict — кэширование LRU: методы и пример кода

В Python OrderedDict— это подкласс словаря, который запоминает порядок вставки элементов. С другой стороны, LRU означает «наименее недавно использованный» и относится к стратегии кэширования, при которой наименее использованные элементы удаляются из кэша, когда он заполняется.

Вот несколько методов, связанных с кэшированием OrderedDictи LRU в Python, а также примеры кода:

  1. из коллекций import OrderedDict: эта строка импортирует класс OrderedDictиз модуля collections.

  2. ordered_dict = OrderedDict(): создается экземпляр OrderedDict.

  3. ordered_dict[key] = value: добавляет пару ключ-значение в OrderedDict. Порядок вставки сохраняется.

  4. ordered_dict.popitem(last=True): удаляет и возвращает последнюю (или первую, если last=False) пару ключ-значение из OrderedDict, позволяющий реализовать кэширование LRU.

  5. ordered_dict.move_to_end(key,last=True): перемещает указанный ключ в конец (или начало, если last=False) OrderedDict, эффективно обновляя свою позицию в кэше LRU.

  6. ordered_dict.clear(): удаляет все элементы из OrderedDict.

Вот пример, демонстрирующий использование OrderedDictс кэшированием LRU:

from collections import OrderedDict
class LRUCache:
    def __init__(self, capacity):
        self.capacity = capacity
        self.cache = OrderedDict()
    def get(self, key):
        if key not in self.cache:
            return -1
        self.cache.move_to_end(key)
        return self.cache[key]
    def put(self, key, value):
        if key in self.cache:
            self.cache.move_to_end(key)
        self.cache[key] = value
        if len(self.cache) > self.capacity:
            self.cache.popitem(last=False)
# Usage
cache = LRUCache(3)
cache.put("key1", "value1")
cache.put("key2", "value2")
cache.put("key3", "value3")
print(cache.get("key1"))  # Output: value1
print(cache.get("key2"))  # Output: value2
print(cache.get("key4"))  # Output: -1 (not found in cache)