efficient filtering of lists of objects
Project description
listful
Description
Efficient filtering of lists of objects
Installation
pip install listful
Usage
Initialize with the fields you want to filter by:
>>> from listful import Listful
>>> data = Listful(
... [{'x': 1, 'y': 10}, {'x': 2, 'y': 20}, {'x': 2, 'y': 30}],
... fields=['x', 'y']
... )
Filtering:
- By one field:
>>> data.filter(x=1).one_or_none()
{'x': 1, 'y': 10}
>>> data.filter(y=20).one_or_none()
{'x': 2, 'y': 20}
- By one field, with more than one result:
>>> data.filter(x=2).to_list()
[{'x': 2, 'y': 20}, {'x': 2, 'y': 30}]
- By two fields:
>>> data.filter(x=2, y=30).one_or_none()
{'x': 2, 'y': 30}
- Raise exception if more than one found
>>> data.filter(x=2).one_or_raise()
Traceback (most recent call last):
<...>
listful.exceptions.MoreThanOneResultException: Found more than one result for filter {'x': 2}: [{'x': 2, 'y': 20}, {'x': 2, 'y': 30}]
- Get all values for a specific field
>>> data.get_all_for_field('x')
[1, 2, 2]
Updating indexes:
Listful
has the same api as list
, so you can get/set/delete items the same way
and the indices will be updated automatically
>>> data[0] = {'x': 17, 'y': 17}
>>> data.filter(x=17).one_or_none()
{'x': 17, 'y': 17}
>>> data[0]
{'x': 17, 'y': 17}
>>> del data[0]
>>> data.filter(x=17).one_or_none()
If you want to modify an element and update the indices you can do so explicitly:
>>> data[0]['x'] = 1
>>> data.rebuild_indexes_for_item(data[0])
>>> data.filter(x=1).one_or_none()
{'x': 1, 'y': 20}
Objects:
Listful supports also lists of objects:
>>> class Item:
... def __init__(self, x, y):
... self.x = x
... self.y = y
...
... def __repr__(self):
... return f"Item(x={self.x}, y={self.y})"
>>> items = Listful(
... [Item(x=1, y=10), Item(x=2, y=20), Item(x=2, y=30)],
... fields=['x', 'y']
... )
>>> items.filter(x=1).one_or_none()
Item(x=1, y=10)
For developers
Create venv and install deps
make init
Install git precommit hook
make precommit_install
Run linters, autoformat, tests etc.
make pretty lint test
Bump new version
make bump_major
make bump_minor
make bump_patch
License
MIT
Change Log
Unreleased
- ...
0.1.3 - 2020-02-14
- ...
0.1.1 - 2020-02-12
- ...
0.1.0 - 2020-02-12
- initial
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
listful-0.1.3.tar.gz
(6.1 kB
view details)
Built Distribution
File details
Details for the file listful-0.1.3.tar.gz
.
File metadata
- Download URL: listful-0.1.3.tar.gz
- Upload date:
- Size: 6.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.8.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b71666e98e83db3a08b7f589c60bc6f17add8a82d378b6d4e2f49931443433e |
|
MD5 | da1050eebe796e5d8a5cfc5abc2e2a34 |
|
BLAKE2b-256 | 0218486ddd8c6c7ffe2a6be3e7d5fc65605bff0e99561e4d212e1d97d52e4894 |
File details
Details for the file listful-0.1.3-py3-none-any.whl
.
File metadata
- Download URL: listful-0.1.3-py3-none-any.whl
- Upload date:
- Size: 6.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.8.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d6363c20257b1bb0a300f64ba856096bbcad584e9ffc8fdc4b921ac775130bc |
|
MD5 | 31ebe1fe78aad87088cf4801f03b3e86 |
|
BLAKE2b-256 | 3cb1f9c5b71147b72d14e0cee0df27435a3bf60a7938df3fb1574bf0a9aeb64b |