Created
December 10, 2019 08:43
-
-
Save vimiix/f0b4b863bfaa3e890a26daa73718868d to your computer and use it in GitHub Desktop.
LRU算法实现
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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