from collections import OrderedDict | |
from typing import Any | |
class LRUCache: | |
def __init__(self, capacity: int): | |
self.cache = OrderedDict() | |
self.capacity = capacity | |
def get(self, key: Any) -> Any: | |
if key not in self.cache: | |
return None | |
else: | |
self.cache.move_to_end(key) # move the key to the end of the OrderedDict | |
return self.cache[key] | |
def put(self, key: Any, value: Any) -> None: | |
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) # pop the first item | |