这项任务非常简单,我能够部分完成它:
from dateutil.parser import parse
for timestamp, grp in itertools.groupby(transactions, lambda x: parse(x['date']).hour):
group = list(grp)
logger.info(f'{timestamp} : {len(group)}')
我得到了hour:count
数组。
但是,我希望得到一个datetime:count
数组(其中datetime
对象表示一个小时)。
是否必须在lambda x
函数中构建datetime
对象?(例如,获取x['date']).hour
、x['date']).day
、x['date']).month
等并使用这些值创建一个新的datetime
),还是有其他方法?
示例输入(事务)包含周/月的数据:
[
{
'date': '2018-12-04T15:34:40+00:00',
'data': 'blabla'
},
{
'date': '2018-12-04T15:38:40+00:00',
'data': 'blabla'
},
{
'date': '2018-12-04T15:45:40+00:00',
'data': 'blabla'
},
]
示例输出:
2018-12-04 13:00:00+00:00 : 6
2018-12-04 14:00:00+00:00 : 1
2018-12-04 15:00:00+00:00 : 2
谢谢
发布于 2018-12-07 03:28:41
因为我是collections.Counter
的粉丝:
from dateutils.parser import parse
from collections import Counter
counter = Counter()
for transaction in transactions:
counter.update(str(parse(transaction['date'][:-12])),)
for key,value in sorted(counter.items()):
print(f'{key}: {value}')
下面是一个使用列表理解的解决方案:
from dateutils.parser import parse
from collections import Counter
counter = Counter([str(parse(x['date'][:-12])) for x in transactions])
for key,value in sorted(counter.items()):
print(f'{key}: {value}')
https://stackoverflow.com/questions/53658048
复制相似问题