给定一个字典列表(来自MongoDB的日志JSON),其中dict的一个值是日期时间值,我需要知道它发生的频率。
让我们说:
[
{"time": "2010-11-11 03:23:59"},
{"time": "2010-11-12 10:16:15"},
{"time": "2010-11-12 14:51:13"},
...
]
频率必须如下:
3 times in a week
或
1 time in an hour
取决于频率(如果每天不超过一次,则仅返回x times in a day
,如果不超过一周,则仅使用x times in a week
等。)
答案 0 :(得分:6)
您可以将字符串解析为日期时间,找到最大值和最小值,减去以找到timedelta,并根据该时间值指定持续时间:
import datetime as dt
data=[
{"time": "2010-11-11 03:23:59"},
{"time": "2010-11-12 10:16:15"},
{"time": "2010-11-12 14:51:13"},
]
def freq(data):
dates=[dt.datetime.strptime(dct['time'],'%Y-%m-%d %H:%M:%S') for dct in data]
date_min=min(dates)
date_max=max(dates)
span=date_max-date_min
l=len(dates)
if span<dt.timedelta(hours=1):
duration='an hour'
elif span<dt.timedelta(hours=24):
duration='a day'
elif span<dt.timedelta(days=7):
duration='a week'
else:
duration='all'
return l,duration
num,duration=freq(data)
print('{n} times in {d}'.format(n=num,d=duration))
产量
3 times in a week