Skip to content

Instantly share code, notes, and snippets.

@vimiix
Created December 10, 2019 08:43
Show Gist options
  • Save vimiix/f0b4b863bfaa3e890a26daa73718868d to your computer and use it in GitHub Desktop.
Save vimiix/f0b4b863bfaa3e890a26daa73718868d to your computer and use it in GitHub Desktop.
LRU算法实现
class LRUCache(object):
def __init__(self, capacity):
self.capacity = capacity
self.queue = []
self.cache = {}
def to_dict(self):
return {"capacity": self.capacity, "queue": self.queue, "cache": self.cache}
@classmethod
def from_dict(cls, d):
ins = cls(d["capacity"])
ins.queue = d["queue"]
ins.cache = d["cache"]
return ins
def get(self, key):
key = str(key)
value = None
if key in self.cache:
if key != self.queue[-1]:
self.queue.remove(key)
self.queue.append(key)
value = self.cache[key]
return value
def set(self, key, value=str(datetime.now())):
key = str(key)
if key in self.cache:
self.queue.remove(key)
elif len(self.queue) == self.capacity:
self.cache.pop(self.queue.pop(0))
self.queue.append(key)
self.cache[key] = value
def keys(self):
return list(reversed(self.queue))
def values(self):
return list(reversed([self.cache[k] for k in self.queue]))
def __contains__(self, o):
return o in self.cache
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment