编写一个程序来读取mbox-short.txt并找出每个消息的按小时分布。你可以从' From'通过找到时间,然后使用冒号第二次拆分字符串。
From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008
累积每小时的计数后,打印出按小时排序的计数,如下所示。 预期输出:
04 3
06 1
07 1
09 2
10 3
11 6
14 1
15 2
16 4
17 2
18 1
19 1
代码:
fname = raw_input('Enter file name: ')
fhand = open(fname)
c = dict()
for line in fhand:
if not line.startswith('From ') : continue
pieces = line.split()
time = pieces[5]
parts = time.split(':')
hour = parts[0]
c[hour] = c.get(hour,0) + 1
lst = list()
for key in c:
value = c[key]
lst.append( (value, key) )
lst.sort()
for value, key in lst:
print key, value
输出
06 1 ← Mismatch
07 1
14 1
18 1
19 1
09 2
15 2
17 2
04 3
10 3
16 4
11 6
答案 0 :(得分:0)
lst
是元组列表,每个元组都以(value,key)格式保存值。并且您希望根据元组的索引1
处的键对其进行排序。在这种情况下,您应该使用密钥调用.sort()
:
from operator import itemgetter
lst.sort(key=itemgetter(1))
或者,您也可以使用 lambda表达式作为键:
lst.sort(key=lambda x: x[1])
此外,您无需创建单独的列表即可打印已排序的内容。您可以使用dict
迭代已排序的sorted(c.items())
对象。因此,您可以这样做:
for key, value in sorted(c.items()):
print key, value
而不是:
lst = list()
for key in c:
value = c[key]
lst.append( (value, key) )
lst.sort()
for value, key in lst:
print key, value