2013-06-17 5 views
1

мне нужно создать учетный словарь отметок времени на нашем лог-файлах сервер с часами в качестве ключейподсчет вхождений таймфреймов в списке

Я не хотят, чтобы сделать многословно случай регулярным выражением случая проверки и append (его питон ... есть лучший способ)

eg что у меня есть список:

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'] 

Как (в питоновских манере) производить что-то вроде так:

, где «0200» будет держать сколько раз значение между 02:00:00 2:59:59 происходит

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

ответ

4

что-то вроде:

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

это правильный ответ если вы используете питон> 2.6/... по крайней мере IMHO –

+1

@JoranBeasley - Там на самом деле портировать класс счетчика доступны [ActiveState] (Http: // код. activestate.com/recipes/576611-counter-class/). У меня на самом деле есть модуль '_monkey_patch_collections', который я использую в одном из моих проектов, чтобы добавить Counter и OrderedDict условно в модуль коллекций, если они находятся на python2.6 или старше ... – mgilson

+0

это прекрасно, спасибо :) – Cybran

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

print countDict 
0

Если вы не хотите использовать счетчик. Вы можете сделать:

dict = {} 
for i in times: 
    try: 
     dict[i.split(':')[0] + "00"]+=1 
    except KeyError: 
     dict[i.split(':')[0] + "00"] = 1 
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)) 
Смежные вопросы