python字典的这段代码有什么问题?

时间:2019-11-08 12:48:49

标签: python dictionary

这是来自Coursera.org课程“ Python for Everybody”的问题,在该课程中,我必须查找并打印包含从名为“ mailbox-short.txt”的文本发送的最多邮件数量的电子邮件ID。问题陈述是:

编写一个程序以通读mbox-short.txt并找出谁发送了最多的邮件。该程序将查找“发件人”行,并将这些行的第二个单词作为发送邮件的人。该程序创建一个Python字典,该字典将发件人的邮件地址映射到它们出现在文件中的次数计数。生成字典后,程序将使用最大循环遍历字典,以找到最多产的提交者。

我尝试了以下方式:

name = input("Enter file:")
if len(name) < 1 : name = "mbox-short.txt"
handle = open(name)
count=dict()
for line in handle:
    line=line.rstrip()
    if not line.startswith('From'):
        continue
    else: 

        words=line.split()
        mail=words[1]
        count[mail]=count.get(mail,0)+1

x=list(count.values())
y=max(x)
for email, num in count.items():
    if num ==y:
        email_id=email

print(email_id,y)

现在错误是每次我运行此代码时,它都会快速运行,但结果变成两倍。就像,预期的结果是

 cwen@iupui.edu 5

但我知道

cwen@iupui.edu 10.

我什至打印了整个词典,看到所有邮件ID的已发送邮件数量翻了一番。

本课程的“列表”部分给出了基于相同文本的类似问题,需要找到发件人的电子邮件ID。在这种情况下,我的代码也给出了双重结果。例如,预期结果是:

cwen@iupui.edu 
cwen@iupui.edu 
cwen@iupui.edu 
cwen@iupui.edu 
cwen@iupui.edu 

但是实际结果是:

cwen@iupui.edu 
cwen@iupui.edu 
cwen@iupui.edu 
cwen@iupui.edu 
cwen@iupui.edu 
cwen@iupui.edu 
cwen@iupui.edu 
cwen@iupui.edu 
cwen@iupui.edu 
cwen@iupui.edu 

我不明白是什么问题。你能帮我吗?

提到的名为“ mbox-short.txt”的文件可以在这里找到:

https://www.py4e.com/code3/mbox-short.txt

1 个答案:

答案 0 :(得分:1)

您的代码完全按照您的要求执行。它正在寻找以"From"开头的行。在文件中,第一封电子邮件有两行,如下所示:

From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008 然后在同一封电子邮件中: From: stephen.marquard@uct.ac.za

您的代码正在计算这两行。根据问题规范,您应该寻找"From "-例如从开始,后面跟一个空格。