Skip to content

Commit d23bcf5

Browse files
Added a more pythonic implementation of LRU_Cache.[TheAlgorithms#4628]
1 parent 9cb5760 commit d23bcf5

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

Diff for: other/lru_cache_pythonic.py

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
from typing import Any, Hashable
2+
3+
'''
4+
The following implementation of LRU Cache is one of the most elegant pythonic implementations.
5+
It only uses the in-built python dictionary. This works because
6+
the Python dictionary maintains the order of insertion of keys and ensures O(1) operations on insert, delete and access.
7+
'''
8+
class LRUCache(dict):
9+
'''
10+
Initialize an LRU Cache with given capacity.
11+
capacity : int -> the capacity of the LRU Cache
12+
'''
13+
def __init__(self, capacity : int):
14+
self.remaining:int = capacity
15+
16+
'''
17+
This method gets the value associated with the key.
18+
key : Hashable -> a hashable object that is mapped to a value inside of the LRU cache.
19+
returns -> value : Any -> any object that is stored as a value inside of the LRU cache.
20+
'''
21+
def get(self, key:Hashable)->Any:
22+
if key not in self:
23+
raise KeyError(f"{key} not found.")
24+
val = self.pop(key) # Pop the key-value and re-insert to maintain the order
25+
self[key] = val
26+
return val
27+
28+
'''
29+
This method puts the value associated with the key provided inside of the LRU cache.
30+
key : Hashable -> a hashable object that is mapped to a value inside of the LRU cache.
31+
value: Any -> any object that is to be associated with the key inside of the LRU cache.
32+
'''
33+
def put(self, key:Hashable, value:Any):
34+
# To pop the last value inside of the LRU cache
35+
if key in self:
36+
self.pop(key)
37+
self[key] = value
38+
return
39+
40+
if self.remaining > 0: self.remaining -= 1
41+
# To pop the least recently used item from the dictionary
42+
else: self.pop(next(iter(self)))
43+
self[key] = value

0 commit comments

Comments
 (0)