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

推荐订阅源

Spread Privacy
Spread Privacy
P
Palo Alto Networks Blog
P
Proofpoint News Feed
AI
AI
Help Net Security
Help Net Security
S
Securelist
T
Troy Hunt's Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
C
Cisco Blogs
Scott Helme
Scott Helme
Hacker News - Newest:
Hacker News - Newest: "LLM"
Vercel News
Vercel News
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
B
Blog
GbyAI
GbyAI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
P
Proofpoint News Feed
S
Security Affairs
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
T
Tenable Blog
H
Help Net Security
NISL@THU
NISL@THU
F
Fortinet All Blogs
博客园_首页
G
GRAHAM CLULEY
L
LINUX DO - 最新话题
P
Privacy International News Feed
G
Google Developers Blog
博客园 - Franky
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Security Archives - TechRepublic
Security Archives - TechRepublic
The Register - Security
The Register - Security
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
量子位
C
Cyber Attacks, Cyber Crime and Cyber Security
Forbes - Security
Forbes - Security
S
Secure Thoughts
Simon Willison's Weblog
Simon Willison's Weblog
D
Docker
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
L
Lohrmann on Cybersecurity
T
Tailwind CSS Blog

博客园 - *感悟人生*

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 来进行汇总。

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