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

嵌套for循环更新Python字典出错求助(Coursera作业9.5)

统计邮件发送次数的代码错误原因分析

在Coursera《Python for Everybody》课程的作业9.5中,需求是读取mbox-short.txt文件,统计所有以From 开头的行里第二个单词(发件人邮箱)的出现次数,并将结果存入Python字典。提交的错误代码因为嵌套了多余的for循环,导致字典里的邮箱计数远高于实际次数,以下是具体分析:

错误代码

handle = open(name)
indirizzi = dict()

for line in handle :
    if not line.startswith("From "):
        continue
    word = line.split()
    # 问题出在这里
    for mail in word:
        mail = word[1]
        indirizzi[mail] = indirizzi.get(mail, 0) + 1

错误原因

当处理一行From 开头的内容时,line.split()会把整行拆分成一个包含多个元素的列表(比如典型的行拆分后会有日期、邮箱、时间等多个元素)。你额外嵌套的for mail in word:循环,会遍历这个列表里的每一个元素——但每次循环你都把mail强制赋值为word[1](也就是目标邮箱地址),然后给这个邮箱的计数加1。

举个例子:如果某一行拆分后有6个元素,那这一行就会给同一个邮箱连续加6次计数,而不是正确的1次。这就是为什么最终统计出来的数值会远高于实际出现的次数。

正确代码

name = input("Enter file:")
if len(name) < 1 : name = "mbox-short.txt"
    
handle = open(name)
emcount = dict()

for line in handle:
    if not line.startswith("From "): continue
    line = line.split()
    line = line[1]
    emcount[line] = emcount.get(line, 0) + 1 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:54:51