You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从max()与推导式创建的Python生成器中读取值?

问题分析与解决方案

首先,你遇到的错误根源在于对max()函数的用法理解有误:

你写的代码b = (max(t["a"]) for t in dic)里,每次迭代时t["a"]是单个整数(比如4、7这些),而max()函数要求传入一个可迭代对象(比如列表、元组),直接给单个整数的话,Python会尝试遍历这个整数,自然会抛出TypeError: 'int' object is not iterable的错误,这就是你调用next(gen)时出错的原因。

正确的一行代码实现

要从字典列表的"a"键中找出最大值,你不需要先构建生成器再处理,直接把所有"a"的值的迭代器传给max()函数即可,一行代码搞定:

dic = [ { "a":4 }, { "a":7 }, { "a":5 } ]
max_val = max(t["a"] for t in dic)

或者用列表推导式(生成器表达式更省内存,因为不需要一次性生成整个列表):

max_val = max([t["a"] for t in dic])

为什么你的生成器无法工作?

再回头看你的代码:生成器表达式(max(t["a"]) for t in dic)的每一次迭代都会执行max(t["a"]),而如前所述,单个整数不能作为max()的参数。哪怕你想逐个取出每个t["a"]的值,也不需要套max(),直接写成(t["a"] for t in dic),这样调用next(gen)就会依次返回4、7、5,但这不是你要的最大值,所以正确的做法是把整个生成器(或列表)传给max(),让max()自己遍历所有值找出最大的那个。

内容的提问来源于stack exchange,提问作者Solal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:52:00