有效过滤对象列表

listful的Python项目详细描述


无精打采的

pypiPython: 3.7+DownloadsBuild StatusCode coverageLicense: MITCode style: black

说明

有效过滤对象列表

安装

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过滤(有/无索引)的比较

listfulpandaspandas_with_index
init7.63e-023.03e-015.24e-02
filter:12.07e-051.46e-031.79e-03
filter:n2.02e-017.40e+011.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日

  • 首字母

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java传递位置作为FragmentPagerAdapter中片段的参数   html Java Jsoup循环打印   java如何使用FileOutputStream写入数据而不丢失旧数据?   java在测试用例类/方法中执行sql before/after/in   java在javafx中注册鼠标处理程序,但处理程序不是内联的   Android嵌入了一个C++库的java代码,不需要TopPLE程序来嵌入它?   片段类内部的java ProgressBar导致setMax方法出现NullPointerException?   带有google app engine的java Activator Play框架   java如何解析星级而不是字符串?   java如何在基本实体中定义通用主键字段?   通过扩展实现Java克隆   使用CipherOutputStream的java递归加密提供一个空字节[]   在运行时提取字段值的Java服务   Java 11和spring boot从spring boot应用程序的fat jar中的依赖项jar加载资源   java尝试使用J2SE枚举所有可用的Wifi网络   使用Java库进行SWIFT MT消息解析   java拆分非逗号分隔的字符串   java为什么toString()不能是静态方法?   java在连接到集群数据库时遇到mongo异常   java访问Hashmap中存储的json有效负载值