PY4E C10 E10.1 使用字典统计消息数,通过在字典中创建一个元组的列表,并且排序。

问题遇到的现象和发生背景

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

期盼得到您的回复!谢谢!