From efe9c72e360f4be3b9d3a2daedbc28dde1f71c72 Mon Sep 17 00:00:00 2001 From: Jay Hutchinson Date: Sun, 6 May 2018 00:30:20 -0500 Subject: Added pop, popitem, and setdefault methods to lrucache class. --- pylru.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/pylru.py b/pylru.py index 62eb801..ac8b133 100644 --- a/pylru.py +++ b/pylru.py @@ -188,6 +188,36 @@ class lrucache(object): for key, value in kwargs.items(): self[key] = value + __defaultObj = object() + def pop(self, key, default=__defaultObj): + if key in self.table: + value = self.peek(key) + del self[key] + return value + + if default is self.__defaultObj: + raise KeyError + + return default + + def popitem(self): + # Make sure the cache isn't empty. + if len(self) < 1: + raise KeyError + + key = self.head.key + value = self.head.value + del self[key] + + return key, value + + def setdefault(self, key, default=None): + if key in self.table: + return self[key] + + self[key] = default + return default + def __iter__(self): # Return an iterator that returns the keys in the cache in order from # the most recently to least recently used. Does not modify the cache's -- cgit v1.2.1