LRU Dict
A fixed size dict like container which evicts Least Recently Used (LRU) items once size limit is exceeded. There are many python implementations available which does similar things. This is a fast and efficient C implementation. LRU maximum capacity can be modified at run-time. If you are looking for pure python version, look else where.
Usage
This can be used to build a LRU cache. Usage is almost like a dict.
from lru import LRU
l = LRU(5) # Create an LRU container that can hold 5 items
print l.peek_first_item(), l.peek_last_item() #return the MRU key and LRU key
# Would print None None
for i in range(5):
l[i] = str(i)
print l.items() # Prints items in MRU order
# Would print [(4, '4'), (3, '3'), (2, '2'), (1, '1'), (0, '0')]
print l.peek_first_item(), l.peek_last_item() #return the MRU key and LRU key
# Would print (4, '4') (0, '0')
l[5] = '5' # Inserting one more item should evict the old item
print l.items()
# Would print [(5, '5'), (4, '4'), (3, '3'), (2, '2'), (1, '1')]
l[3] # Accessing an item would make it MRU
print l.items()
# Would print [(3, '3'), (5, '5'), (4, '4'), (2, '2'), (1, '1')]
# Now 3 is in front
l.keys() # Can get keys alone in MRU order
# Would print [3, 5, 4, 2, 1]
del l[4] # Delete an item
print l.items()
# Would print [(3, '3'), (5, '5'), (2, '2'), (1, '1')]
print l.get_size()
# Would print 5
l.set_size(3)
print l.items()
# Would print [(3, '3'), (5, '5'), (2, '2')]
print l.get_size()
# Would print 3
print l.has_key(5)
# Would print True
print 2 in l
# Would print True
l.get_stats()
# Would print (1, 0)
l.update(5='0') # Update an item
print l.items()
# Would print [(5, '0'), (3, '3'), (2, '2')]
l.clear()
print l.items()
# Would print []
Install
pip install lru-dict
or
easy_install lru_dict
When to use this
Like mentioned above there are many python implementations of an LRU. Use this if you need a faster and memory efficient alternative. It is implemented with a dict and associated linked list to keep track of LRU order. See code for a more detailed explanation. To see an indicative comparison with a pure python module, consider a benchmark against pylru (just chosen at random, it should be similar with other python implementations as well).
$ python bench.py pylru.lrucache Time : 3.31 s, Memory : 453672 Kb $ python bench.py lru.LRU Time : 0.23 s, Memory : 124328 Kb
Metadata
Release files for lru-dict 1.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| lru-dict-1.1.5.tar.gz | 8.6 kB | Details |
Release files / lru-dict-1.1.5.tar.gz
| Download URL | lru-dict-1.1.5.tar.gz |
|---|---|
| Size | 8.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d01facbd7daad1b45360a256c68295839bb9576d71d6a165f6e4c7982417a44c
|
|
BLAKE2b-256 checksum How to use checksums |
b44b848b90d15a6e348e7cf309a7c26ed56ae76c6a571cae8eabdba31fb43538
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |