Python convtools 展示:简单聚合

大家好,我是 Python 库 convtools 的作者。它允许动态定义数据转换,然后将其编译成专门的 Python 代码。
这是我使用这个工具的第一个案例。

比方说,您想按 “a ”对字典进行分组,取 “b ”的总和。
你可以自己写代码,但如果代码可以由库生成,为什么还要自己写呢?尤其是 convtools 会尽力写出更快的代码。

下面是两个例子:使用 convtools 和不使用 convtools。
可以说:更简洁。
客观地说:对 50 多个字典来说更快。

"""
convtools showcase 1:
Group dictionaries by "a", taking sums of "b".
"""

data = [
    {"a": 1, "b": 1},
    {"a": 2, "b": 2},
    {"a": 1, "b": 3},
    {"a": 2, "b": 4},
    {"a": 1, "b": 5},
] * 10


# VANILLA PYTHON
def f_vanilla(data):
    agg_data = {}
    for item in data:
        if item["a"] in agg_data:
            agg_data[item["a"]]["b"] += item["b"]
        else:
            agg_data[item["a"]] = {"a": item["a"], "b": item["b"]}
    return list(agg_data.values())


result = f_vanilla(data)

"""
In [22]: result
Out[22]: [{'a': 1, 'b': 90}, {'a': 2, 'b': 60}]

Python 3.12.1 (main, Jan  3 2024, 13:01:25) [Clang 15.0.0 (clang-1500.1.0.2.5)]
In [17]: %timeit f_vanilla(data)
4.3 µs ± 18.1 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)
"""


from convtools import conversion as c

f_convtools = (
    c.group_by(c.item("a"))
    .aggregate(
        {
            "a": c.item("a"),
            "b": c.ReduceFuncs.Sum(c.item("b")),
        }
    )
    .gen_converter()
)

result2 = f_convtools(data)

assert result == result2

"""
Python 3.12.1 (main, Jan  3 2024, 13:01:25) [Clang 15.0.0 (clang-1500.1.0.2.5)]
In [18]: %timeit f_convtools(data)
3.69 µs ± 5.78 ns per loop (mean ± std. dev. of 7 runs, 100,000 loops each)
"""

以下是文档 https://convtools.readthedocs.io
目前只有英文版。

如果有任何反馈,我们将不胜感激。包括我正在使用的英译中翻译器是否做得很好,这个库是否有用,以及任何问题和想法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值