高效的对象列表过滤
项目描述
listful
描述
高效的对象列表过滤
安装
pip install listful
使用
使用您要过滤的字段初始化
>>> from listful import Listful
>>> data = Listful(
... [{'x': 1, 'y': 10}, {'x': 2, 'y': 20}, {'x': 2, 'y': 30}],
... fields=['x', 'y']
... )
(如果您没有指定字段,将选择所有具有可哈希值的对应字段的字段)
过滤
-
单个字段
>>> data.filter(x=1).one_or_none() {'x': 1, 'y': 10} >>> data.filter(y=20).one_or_none() {'x': 2, 'y': 20}
-
单个字段,有多个结果
>>> data.filter(x=2).to_list() [{'x': 2, 'y': 20}, {'x': 2, 'y': 30}]
-
两个字段
>>> data.filter(x=2, y=30).one_or_none() {'x': 2, 'y': 30}
-
如果找到多个,则引发异常
>>> 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}]
-
获取特定字段的全部值
>>> data.get_all_for_field('x') [1, 2, 2]
更新索引
Listful
与 list
具有相同的API,因此您可以以相同的方式获取/设置/删除项目,索引将自动更新
>>> 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()
如果您想修改一个元素并更新索引,您可以显式地这样做
>>> data[0]['x'] = 1
>>> data.rebuild_indexes_for_item(data[0])
>>> data.filter(x=1).one_or_none()
{'x': 1, 'y': 20}
对象
Listful 也支持对象列表
>>> 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)
这里,如果您没有指定字段,将选择所有具有可哈希值的字段
>>> items = Listful(
... [Item(x=1, y=10), Item(x=2, y=20), Item(x=2, y=30)],
... )
>>> items.fields
['x', 'y']
性能
见 scripts/timing.py
。
使用 listful 与使用 pandas(带/不带索引)过滤的比较
listful | pandas | pandas_with_index | |
---|---|---|---|
init | 7.63e-02 | 3.03e-01 | 5.24e-02 |
filter:1 | 2.07e-05 | 1.46e-03 | 1.79e-03 |
filter:n | 2.02e-01 | 7.40e+01 | 1.54e+01 |
比带索引的pandas快70倍,比不带索引的pandas快360倍。
对于开发者
创建 venv 并安装依赖项
make init
安装 git 预提交钩子
make precommit_install
运行 linters,autoformat,测试等。
make pretty lint test
提升新版本
make bump_major
make bump_minor
make bump_patch
许可
MIT
变更日志
未发布
- ...
0.3.0 - 2021-01-17
- ...
0.2.1 - 2020-04-08
- ...
0.2.0 - 2020-04-08
- 添加对默认字段的支持
0.1.3 - 2020-02-14
- ...
0.1.1 - 2020-02-12
- ...
0.1.0 - 2020-02-12
- initial
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
listful-0.3.0.tar.gz (7.6 kB 查看哈希值)
构建分发
listful-0.3.0-py3-none-any.whl (7.3 kB 查看哈希值)
关闭
listful-0.3.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7551f9c047e413bbfaf4938bfc1e4e79095a8460220570c5ffd8a85aed104974 |
|
MD5 | 56655c122db484f7d737e3c225995f24 |
|
BLAKE2b-256 | 02158c50f176ba61a5597beeca7649f8f0ade01412bff07533793153d1108c74 |
关闭
listful-0.3.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7023c5c1e5fb12938f841fe8fb7736e94219edf1a2fee1eec2f31fd5eeb69b13 |
|
MD5 | 05b2f34872c9dca69171871b71f822af |
|
BLAKE2b-256 | 2306afabcde3613687333736818a1c2f8630910676b8f0292fb1a739cf85f711 |