lru-dict 1.4.1


pip install lru-dict

  Latest version

Released: Nov 02, 2025

Project Links

Meta
Author: Amit Dev
Requires Python: >=3.9

Classifiers

Development Status
  • 5 - Production/Stable

Intended Audience
  • Developers

Operating System
  • OS Independent
  • POSIX

Programming Language
  • C
  • Python :: 3
  • Python :: 3.9
  • Python :: 3.10
  • Python :: 3.11
  • Python :: 3.12
  • Python :: 3.13
  • Python :: 3.14
  • Python :: Implementation :: CPython

Topic
  • Software Development :: Libraries :: Python Modules
https://github.com/amitdev/lru-dict/actions/workflows/tests.yml/badge.svg https://github.com/amitdev/lru-dict/actions/workflows/build-and-deploy.yml/badge.svg https://img.shields.io/badge/maintainers-wanted-red.svg

Note: This project is stable and production ready, but looking for a lead maintainer. Preferably someone who uses this library and made contributions to it.

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 []

def evicted(key, value):
  print "removing: %s, %s" % (key, value)

l = LRU(1, callback=evicted)

l[1] = '1'
l[2] = '2'
# callback would print removing: 1, 1

l[2] = '3'
# doesn't call the evicted callback

print l.items()
# would print [(2, '3')]

del l[2]
# doesn't call the evicted callback

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

Wheel compatibility matrix

Platform CPython 3.9 CPython 3.10 CPython 3.11 CPython 3.12 CPython 3.13 CPython 3.14 CPython (additional flags: t) 3.14 PyPy 3.10 (pp73) PyPy 3.11 (pp73)
android_21_arm64_v8a
android_21_x86_64
ios_13_0_arm64_iphoneos
ios_13_0_arm64_iphonesimulator
ios_13_0_x86_64_iphonesimulator
macosx_10_13_universal2
macosx_10_13_x86_64
macosx_10_15_x86_64
macosx_10_9_universal2
macosx_10_9_x86_64
macosx_11_0_arm64
manylinux1_x86_64
manylinux2014_aarch64
manylinux2014_ppc64le
manylinux_2_17_aarch64
manylinux_2_17_ppc64le
manylinux_2_28_aarch64
manylinux_2_28_ppc64le
manylinux_2_28_x86_64
manylinux_2_5_x86_64
musllinux_1_2_aarch64
musllinux_1_2_ppc64le
musllinux_1_2_x86_64
win32
win_amd64

Files in release

lru_dict-1.4.1-cp310-cp310-macosx_10_9_universal2.whl (16.4KiB)
lru_dict-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl (11.0KiB)
lru_dict-1.4.1-cp310-cp310-macosx_11_0_arm64.whl (11.5KiB)
lru_dict-1.4.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (29.1KiB)
lru_dict-1.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (30.1KiB)
lru_dict-1.4.1-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (31.7KiB)
lru_dict-1.4.1-cp310-cp310-musllinux_1_2_aarch64.whl (29.5KiB)
lru_dict-1.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl (30.8KiB)
lru_dict-1.4.1-cp310-cp310-musllinux_1_2_x86_64.whl (28.8KiB)
lru_dict-1.4.1-cp310-cp310-win32.whl (12.8KiB)
lru_dict-1.4.1-cp310-cp310-win_amd64.whl (13.7KiB)
lru_dict-1.4.1-cp311-cp311-macosx_10_9_universal2.whl (16.4KiB)
lru_dict-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl (11.0KiB)
lru_dict-1.4.1-cp311-cp311-macosx_11_0_arm64.whl (11.5KiB)
lru_dict-1.4.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (30.1KiB)
lru_dict-1.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (31.1KiB)
lru_dict-1.4.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (32.7KiB)
lru_dict-1.4.1-cp311-cp311-musllinux_1_2_aarch64.whl (30.4KiB)
lru_dict-1.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl (31.7KiB)
lru_dict-1.4.1-cp311-cp311-musllinux_1_2_x86_64.whl (29.9KiB)
lru_dict-1.4.1-cp311-cp311-win32.whl (12.7KiB)
lru_dict-1.4.1-cp311-cp311-win_amd64.whl (13.7KiB)
lru_dict-1.4.1-cp312-cp312-macosx_10_13_universal2.whl (16.3KiB)
lru_dict-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl (11.0KiB)
lru_dict-1.4.1-cp312-cp312-macosx_11_0_arm64.whl (11.4KiB)
lru_dict-1.4.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (31.2KiB)
lru_dict-1.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (32.1KiB)
lru_dict-1.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (33.5KiB)
lru_dict-1.4.1-cp312-cp312-musllinux_1_2_aarch64.whl (31.4KiB)
lru_dict-1.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl (32.6KiB)
lru_dict-1.4.1-cp312-cp312-musllinux_1_2_x86_64.whl (30.9KiB)
lru_dict-1.4.1-cp312-cp312-win32.whl (12.8KiB)
lru_dict-1.4.1-cp312-cp312-win_amd64.whl (13.8KiB)
lru_dict-1.4.1-cp313-cp313-android_21_arm64_v8a.whl (12.0KiB)
lru_dict-1.4.1-cp313-cp313-android_21_x86_64.whl (12.0KiB)
lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl (10.7KiB)
lru_dict-1.4.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl (11.0KiB)
lru_dict-1.4.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl (10.5KiB)
lru_dict-1.4.1-cp313-cp313-macosx_10_13_universal2.whl (16.3KiB)
lru_dict-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl (11.0KiB)
lru_dict-1.4.1-cp313-cp313-macosx_11_0_arm64.whl (11.4KiB)
lru_dict-1.4.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (31.3KiB)
lru_dict-1.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (32.1KiB)
lru_dict-1.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (33.5KiB)
lru_dict-1.4.1-cp313-cp313-musllinux_1_2_aarch64.whl (31.5KiB)
lru_dict-1.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl (32.7KiB)
lru_dict-1.4.1-cp313-cp313-musllinux_1_2_x86_64.whl (30.9KiB)
lru_dict-1.4.1-cp313-cp313-win32.whl (12.8KiB)
lru_dict-1.4.1-cp313-cp313-win_amd64.whl (13.8KiB)
lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl (10.9KiB)
lru_dict-1.4.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl (11.2KiB)
lru_dict-1.4.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl (10.7KiB)
lru_dict-1.4.1-cp314-cp314-macosx_10_13_universal2.whl (16.3KiB)
lru_dict-1.4.1-cp314-cp314-macosx_10_13_x86_64.whl (11.0KiB)
lru_dict-1.4.1-cp314-cp314-macosx_11_0_arm64.whl (11.5KiB)
lru_dict-1.4.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (31.5KiB)
lru_dict-1.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (32.6KiB)
lru_dict-1.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (34.3KiB)
lru_dict-1.4.1-cp314-cp314-musllinux_1_2_aarch64.whl (31.9KiB)
lru_dict-1.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl (33.3KiB)
lru_dict-1.4.1-cp314-cp314-musllinux_1_2_x86_64.whl (31.2KiB)
lru_dict-1.4.1-cp314-cp314-win32.whl (13.1KiB)
lru_dict-1.4.1-cp314-cp314-win_amd64.whl (14.1KiB)
lru_dict-1.4.1-cp314-cp314t-macosx_10_13_universal2.whl (16.8KiB)
lru_dict-1.4.1-cp314-cp314t-macosx_10_13_x86_64.whl (11.2KiB)
lru_dict-1.4.1-cp314-cp314t-macosx_11_0_arm64.whl (11.7KiB)
lru_dict-1.4.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (35.5KiB)
lru_dict-1.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (37.8KiB)
lru_dict-1.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (38.0KiB)
lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl (36.4KiB)
lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl (36.5KiB)
lru_dict-1.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl (35.1KiB)
lru_dict-1.4.1-cp314-cp314t-win32.whl (13.5KiB)
lru_dict-1.4.1-cp314-cp314t-win_amd64.whl (14.8KiB)
lru_dict-1.4.1-cp39-cp39-macosx_10_9_universal2.whl (16.4KiB)
lru_dict-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl (11.0KiB)
lru_dict-1.4.1-cp39-cp39-macosx_11_0_arm64.whl (11.5KiB)
lru_dict-1.4.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (28.8KiB)
lru_dict-1.4.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (29.8KiB)
lru_dict-1.4.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl (31.4KiB)
lru_dict-1.4.1-cp39-cp39-musllinux_1_2_aarch64.whl (29.1KiB)
lru_dict-1.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl (30.4KiB)
lru_dict-1.4.1-cp39-cp39-musllinux_1_2_x86_64.whl (28.5KiB)
lru_dict-1.4.1-cp39-cp39-win32.whl (12.8KiB)
lru_dict-1.4.1-cp39-cp39-win_amd64.whl (13.7KiB)
lru_dict-1.4.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (10.2KiB)
lru_dict-1.4.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl (10.6KiB)
lru_dict-1.4.1-pp310-pypy310_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (12.7KiB)
lru_dict-1.4.1-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (13.6KiB)
lru_dict-1.4.1-pp310-pypy310_pp73-win_amd64.whl (13.8KiB)
lru_dict-1.4.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl (10.1KiB)
lru_dict-1.4.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl (10.6KiB)
lru_dict-1.4.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (12.7KiB)
lru_dict-1.4.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (13.6KiB)
lru_dict-1.4.1-pp311-pypy311_pp73-win_amd64.whl (13.7KiB)
lru_dict-1.4.1.tar.gz (13.1KiB)
Extras:
Dependencies: