计算列表中时间帧的出现次数

时间:2013-06-17 15:31:51

标签: python

我需要在服务器日志文件上创建一个时间戳的计数字典,并将小时作为键

我不想做冗长的案例检查正则表达式和追加(它的python ..有更好的方法)

e.g。说我有一个清单:

 times = ['02:49:04', '02:50:03', '03:21:23', '03:21:48', '03:24:29', '03:30:29', '03:30:30', '03:44:54', '03:50:11', '03:52:03', '03:52:06', '03:52:30', '03:52:48', '03:54:50', '03:55:21', '03:56:50', '03:57:31', '04:05:10', '04:35:59', '04:39:50', '04:41:47', '04:46:43']

我如何(以pythonic方式)产生这样的东西:

其中“0200”将保持02:00:00到02:59:59之间的值的次数

result = { "0200":2, "0300":15, "0400":5 } 

4 个答案:

答案 0 :(得分:4)

类似的东西:

from collections import Counter
counts = Counter(time[:2]+'00' for time in times)

答案 1 :(得分:1)

from collections import defaultdict
countDict = defaultdict(int)
for t in times:
    countDict[t[:2]+"--"] += 1

print  countDict

答案 2 :(得分:0)

如果您不想使用计数器。你可以这样做:

dict = {}
for i in times:
   try:
       dict[i.split(':')[0] + "00"]+=1
   except KeyError:
       dict[i.split(':')[0] + "00"] = 1

答案 3 :(得分:0)

这是itertools的另一种方式。

import itertools
key = lambda x: x[:2]
result = {}
for hour, group in itertools.groupby(sorted(times, key=key), key=key):
    result[hour + '00'] = len(list(group))