我正在进行Coursera python练习,这是问题
编写一个程序来读取mbox-short.txt并找出每个消息的按小时分布。您可以通过查找时间从“从”行拉出小时,然后使用冒号再次将字符串拆分。>
From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008
累积每小时的计数后,打印出按小时排序的计数,如下所示。
包含文本文件的链接是:http://www.py4inf.com/code/mbox-short.txt
所需的输出如下:
04 3
06 1
07 1
09 2
10 3
11 6
14 1
15 2
16 4
17 2
18 1
19 1
这是我的代码:
name = raw_input("Enter file:")
if len(name) < 1 : name = "mbox-short.txt"
handle = open(name)
count = dict()
lst = list()
for line in handle:
if line.startswith('From '):
word = line.split()
temp = word[5]
time= temp.split(':')
hour = time[0]
count[hour] = count.get(hour, 0) + 1
for k, v in count.items():
lst.append((k, v))
print lst.sort()
然而,我得到的结果是无。当我将最后一行改为:
print lst
结果变成了:
[('11', 6), ('10', 3), ('15', 2), ('14', 1), ('04', 3), ('16', 4), ('19', 1), ('18', 1), ('09', 2), ('17', 2), ('06', 1), ('07', 1)]
我用谷歌搜索并找到了这个问题的一个解决方案,就像这样:
name = raw_input("Enter file:")
if len(name) < 1 : name = "mbox-short.txt"
handle = open(name)
counts = dict()
for line in handle:
wds = line.split()
if len(wds) < 5 : continue
if wds[0] != "From" : continue
when = wds[5]
tics = when.split(":")
if len(tics) != 3 : continue
hour = tics[0]
counts[hour] = counts.get(hour,0) + 1
lst = counts.items()
lst.sort()
for key, val in lst :
print key, val
除了文本文件中的循环迭代行之外,我没有看到我的错误代码和我从github获得的正确代码之间的功能差异。
有人能在这里给我一些见解吗?
答案 0 :(得分:2)
从documentation开始,调用@ControllerAdvice
public class ExceptionHandlerController {
protected static final Logger logger = LogManager.getLogger(ExceptionHandlerController.class);
@ExceptionHandler(StaleObjectStateException.class)
public ResponseEntity<String> handleStaleObjectStateException(StaleObjectStateException e){
logger.error("A stale object state exception has been thrown", e);
/** Will return a HTTP 500 if you throw this exception **/
return new ReponseEntity<String(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
会对列表进行排序。这意味着它可以直接修改列表。你想要使用的是sorted(lst)
,它将返回一个排序列表。
或者,正如评论中所指出的,请致电
lst.sort()
获得所需的输出。