有效过滤对象列表
listful的Python项目详细描述
无精打采的
说明
有效过滤对象列表
安装
pip install listful
使用
使用要筛选的字段初始化:
^{pr2}$(如果不指定字段,则将选择其对应值可散列的所有字段)
过滤:
- 按一个字段:
>>> 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 |
比有索引的熊猫快70倍,比没有索引的熊猫快360倍。在
对于开发者
创建venv并安装deps
make init
安装git precommit hook
make precommit_install
运行linters、autoformat、tests等。
make pretty lint test
Bump新版本
make bump_major
make bump_minor
make bump_patch
许可证
麻省理工学院
更改日志
未释放
- 。。。在
0.2.1-2020年4月8日
- 。。。在
0.2.0-2020年4月8日
- 添加对默认字段的支持
0.1.3-2020年2月14日
- 。。。在
0.1.1-2020年2月12日
- 。。。在
0.1.0-2020年2月12日
- 首字母
- 项目
标签: