基于索引1处的值按升序对元组列表进行排序

时间:2017-01-22 04:33:25

标签: python python-2.7 sorting

编写一个程序来读取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

1 个答案:

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