Python计算字典值len/min/sum时for循环仅返回单值原因
第一种for循环写法的错误原因
你写的循环逻辑问题出在变量赋值的位置和方式:
循环内部每次执行时,都会给stat变量重新赋值一个只包含当前遍历键的全新字典,而不是在已有字典的基础上新增键值对。整个循环的执行过程是:
- 遍历到
Monday时,stat被赋值为{"Monday": [4, 19, 87]} - 遍历到
Tuesday时,stat直接被覆盖为{"Tuesday": [4, 12, 62]},之前存的Monday数据被完全清空 - 后续每一次循环都会重复覆盖操作,上一轮存的内容全部丢失
- 循环最后遍历到的键是
Sunday,所以最终stat里就只剩Sunday对应的单条数据。
两种实现方式的核心差异
- 手动写for循环的正确逻辑:必须在循环外部先初始化一个空字典,循环过程中只做「给已有字典新增键值对」的操作,而不是每次重新给字典变量整体赋值,修正后的代码如下:
# 先在循环外创建空字典,这步不能放到循环里 stat = {} for k, v in scores.items(): # 往已有的stat字典里追加当前键值对,不会覆盖之前的内容 stat[k] = [len(v), min(v), sum(v)]
- 字典推导式的逻辑:你用的推导式写法是Python内置的语法糖,它会自动完成「初始化空字典、遍历所有元素、逐个追加键值对、返回最终完整字典」的全流程,不需要你手动写初始化和追加的步骤,天然不会出现覆盖问题,写法也更简洁。
内容的提问来源于stack exchange,提问作者Jas
相关产品推荐
相关产品推荐

