问题遇到的现象和发生背景
Python for everybody Chapter10 Exercise 10.1
问题:修改以前的程序如下:读取和解析“From”行,并从行中找出地址。使用字典计算来自每个地址的消息数。
在读取了所有的数据之后,通过从字典中创建一个(count、email)元组的列表,打印出提交次数最少的地址。
然后按相反的顺序对列表进行排序,并打印出提交次数最多的地址。
示例:
Sample Line:
From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008
示例执行:
Enter a file name: mbox-short.txt
cwen@iupui.edu 5
Enter a file name: mbox.txt
zqian@umich.edu 195
文件:E:/mbox-short.txt
文件内部的部分内容:
【
From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008
Return-Path: postmaster@collab.sakaiproject.org
Received: from murder (mail.umich.edu [141.211.14.90])
by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA;
Sat, 05 Jan 2008 09:14:16 -0500
】
解答问题的代码
fname = input('Enter a file name:')
fhand = open(fname)
counts=dict()
for line in fhand:
line=line.rstrip()
# skip 'uninteresting lines'
if line.startswith('From '):
print(line)
words=line.split()
for word in words:
if len(word) > 9:
if word not in counts:
counts[word]=1
else:
counts[word]+=1
print(counts)
lst=list()
for key,val in list(counts.items()):
lst.append((key,val))
lst.sort(reverse=True)
for key,val in lst[:1]:
print(key,val)
运行结果及报错内容
{'stephen.marquard@uct.ac.za': 2, 'louis@media.berkeley.edu': 3, 'zqian@umich.edu': 4, 'rjlowe@iupui.edu': 2, 'cwen@iupui.edu': 5, 'gsilver@umich.edu': 3, 'wagnermr@iupui.edu': 1, 'antranig@caret.cam.ac.uk': 1, 'gopal.ramasammycook@gmail.com': 1, 'david.horwitz@uct.ac.za': 4, 'ray@media.berkeley.edu': 1}
zqian@umich.edu 4
我疑惑的点:
①下面这行代码起什么作用?
lst.sort(reverse=True)
②为什么以下这二行代码的运行结果为:’zqian@umich.edu 4‘
for key,val in lst[:1]:
print(key,val)
我想要达到的结果
最多:(出现次数最多即可)
cwen@iupui.edu 5
最少:(出现次数最少即可)
wagnermr@iupui.edu 1