显示基于元组的排序列表和字典中的循环

时间:2016-03-15 03:02:27

标签: python list loops sorting tuples

我正在进行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获得的正确代码之间的功能差异。

有人能在这里给我一些见解吗?

1 个答案:

答案 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()

获得所需的输出。