Получить среднее количество вхождений в списке диктов - PullRequest
1 голос
/ 23 ноября 2011

Учитывая список словарей (журнал JSON от MongoDB), где одним из значений dict является значение datetime, мне нужно знать частоту, с которой это происходит.

Допустим,

[
    {"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 и т. д.).

1 Ответ

6 голосов
/ 23 ноября 2011

Вы можете разобрать строки в datetime, найти максимальное и минимальное значения, вычесть, чтобы найти timedelta, и назначить длительность на основе этой 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
...