惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - *感悟人生*

PDFtoEXCEL批量处理高保真同步格式 JS 逆向与前端安全加固实战指南 批量处理苹果电脑的HEIF格式转成JPG|PNG 邮件群发系统 注册授权--续 独立授权模块 --可以为你的程序或者工具加上一把锁 音频转换合并切割工具 修改文件重命名(1、默认去掉预览和备份,2、默认当前文件路径) AI 平台 SQL语句解析 扣代码中,遇到this 应该怎么处理 AST解OB混淆,适用大部分的混淆 Akamai的形成与风控分析:聚焦Akamai 3.0 执行py3o的重启脚本(包含手动执行,以及自动执行的脚本) reduce与map+filter的复杂计算场景 py3o中数字金额转大写 加密解密基本概念 MJ提示词自动批处理GUI版 uv 在 Python 开发中的常用命令详解 表单和载荷的区别,以及python和js在处理json时的空格问题。 R函数处理异步迭代,在爬虫中的作用。
py3o中汇总的计算:sum reduce map 三种形式来处理对比
*感悟人生* · 2025-07-03 · via 博客园 - *感悟人生*

在 Odoo 或 Py3o 模板中,汇总通常是对某些字段进行累加或汇总统计。你已经提到的通过列表推导式 (list comprehension) 和 sum 来进行汇总是最常见的方式,下面我会介绍如何使用 reducemap 来实现汇总。

1. 使用 reduce 来汇总

reduce 函数来自 Python 的 functools 模块,它会将列表中的元素通过一个累加函数累积起来。以下是通过 reduce 来实现汇总的示例。

首先,确保你有正确的导入:

${eval("__import__('functools').reduce(lambda x, y: x + y, [lyt.package_qty for lyt in objects.order_line if lyt.client_order_ref == order_ref])")}

解释:

  • reduce(lambda x, y: x + y, ...):这个表达式将 xy 累加。reduce 会将列表中的每个元素依次和前一个元素累加,最终返回总和。

  • [lyt.package_qty for lyt in objects.order_line if lyt.client_order_ref == order_ref]:列表推导式生成了需要汇总的所有 package_qty 元素。


============================================================================================================================================================

2. 使用 map 来汇总

map 函数用于对列表中的每个元素应用一个函数,然后返回一个新的列表。你可以先使用 map 转换数据(例如将数据转化为数字),然后使用 sum 来汇总。

${sum(map(lambda lyt: lyt.package_qty, filter(lambda lyt: lyt.client_order_ref == order_ref, objects.order_line)))}

解释:

  • map(lambda lyt: lyt.package_qty, ...):这个表达式对 order_line 列表中的每个元素应用 lambda 函数,提取 package_qty 字段。

  • filter(lambda lyt: lyt.client_order_ref == order_ref, objects.order_line)filter 用来过滤出满足条件的订单行(根据 client_order_ref 字段过滤)。

map 会生成一个新的列表,其中每个元素都是 package_qty 字段的值。然后你可以用 sum() 来对其进行求和。

3. 对比:sum vs reduce vs map

  • sum:最直观的求和方式,代码简洁。

  • reduce:适合复杂的累积操作(例如加法、乘法等)。但对于简单求和,sum 更简洁高效。

  • map:用于对每个元素应用某个函数后再进行处理,常与 filter 结合使用来处理复杂的数据。

示例汇总:

  1. 使用 sum

  1. 使用 reduce

  1. 使用 mapfilter

总结:

  • sum 是最简洁的求和方式。

  • reduce 适合累积过程,适合复杂计算。

  • mapfilter 适用于复杂的转换和过滤,最后可以结合 sum 来进行汇总。

  你可以根据数据的复杂性和需求来选择最合适的方法。