高效的对象列表过滤
项目描述
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 |