按键对词典进行分组并查找最大值 [英] Group dictionary by key and find max value
本文介绍了按键对词典进行分组并查找最大值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个以日期时间为键、以ID列表为值的字典。它实际上是一天中每个时间的活动用户数。
词典如下:
2016-03-09 12:13:24 [34941L, 34943L, 35183L, 35028L, 35031L, 35081L, 35091L, 35167L, 35180L]
2016-03-09 12:16:49 [34941L, 34943L, 35183L, 35028L, 35031L, 35081L, 35091L, 35167L, 35187L]
2016-03-09 12:17:14 [34941L, 34943L, 35183L, 35028L, 35031L, 35081L, 35091L, 35167L, 35187L]
2016-03-09 12:21:39 [34941L, 34943L, 35183L, 35028L, 35031L, 35081L, 35091L, 35167L]
2016-03-09 12:22:01 [34941L, 34943L, 35183L, 35028L, 35031L, 35081L, 35091L, 35188L]
2016-03-09 12:23:08 [34941L, 34943L, 35183L, 35028L, 35031L, 35081L, 35091L, 35188L]
2016-03-09 12:23:37 [35191L, 34941L, 34943L, 35183L, 35028L, 35031L, 35081L, 35091L]
2016-03-09 12:24:05 [35191L, 34941L, 34943L, 35183L, 35028L, 35031L, 35081L, 35091L]
我想做的是制作一个词典,它将包含每天的最大用户数。类似于:
2016-03-07: 25
2016-03-08: 38
2016-03-09: 12
2016-03-10: 29
编辑:我想找出每天的高峰。
所以我需要找到值列表的长度,然后按键的日期分组,最后找到组的最大值。
查找列表的长度很容易,如下所示:
for time, user_id in sorted(users_by_time.iteritems()):
user_by_time[time] = len(user_id)
但我正在处理分组问题。
如何才能同时进行分组和最大值计算,并且最好是以最有效/最有效的方式进行?
推荐答案
获取每天的峰值非常容易:
from collections import defaultdict
max_count_by_day = defaultdict(int)
for dt, user_ids in users_by_time.iteritems():
d = dt.date()
max_count_by_day[d] = max(max_count_by_day[d], len(user_ids))
对于每天不同的用户数,请使用defaultdict(set)
:
users_in_day = defaultdict(set)
for dt, user_ids in users_by_time.iteritems():
users_in_day[dt.date()].update(user_ids)
然后将词典拼合为date: count
中的另一个:
usercount_per_day = {d: len(user_ids) for d, user_ids in users_in_day.iteritems()}
这篇关于按键对词典进行分组并查找最大值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文