按键对词典进行分组并查找最大值 [英] Group dictionary by key and find max value

查看:0
本文介绍了按键对词典进行分组并查找最大值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个以日期时间为键、以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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆