Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按键对字典进行分组并查找最大值_Python_Dictionary_Itertools - Fatal编程技术网

Python 按键对字典进行分组并查找最大值

Python 按键对字典进行分组并查找最大值,python,dictionary,itertools,Python,Dictionary,Itertools,我有一个字典,datetime是键,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 1

我有一个字典,datetime是键,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)
编辑:我想找到每天的高峰

所以我需要找到值列表的长度,然后按键的日期分组,最后找到组的最大值

查找列表的长度是一个简单的部分,如:

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
output = defaultdict(int)
for key, value in my_dict:
    b[key.date()] += len(value)
然后转换为列表和排序

output = sorted(zip(output.keys(), output.values()))

对于分组,您可以这样做

from collections import defaultdict
output = defaultdict(int)
for key, value in my_dict:
    b[key.date()] += len(value)
然后转换为列表和排序

output = sorted(zip(output.keys(), output.values()))

要达到每天的高峰非常容易:

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)

然后将字典展平为另一个
日期:count

usercount_per_day = {d: len(user_ids) for d, user_ids in users_in_day.iteritems()}

要达到每天的高峰非常容易:

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)

然后将字典展平为另一个
日期:count

usercount_per_day = {d: len(user_ids) for d, user_ids in users_in_day.iteritems()}

输入dict的键是datetime.datetime对象?还是字符串?@MuhammadTahir,它们是datetime.datetime对象如果你真的用
dict
的语法发布你的
dict
,这样用户就可以直接复制和粘贴:)输入dict的键是datetime.datetime对象?还是字符串?@MuhammadTahir,它们是datetime.datetime对象如果你真的用
dict
的语法发布你的
dict
,这样用户就可以直接复制粘贴:)我不知道把长度加起来是否是个好主意,因为如果同一个用户在同一天的不同时间访问会怎么样?我们希望
34943L
因为他访问了六次而算作六个用户吗?@Kevin耶!很抱歉忘了:)@Antti的答案在这种情况下更为有效。我不知道仅仅将长度相加是否是个好主意,因为如果同一用户在同一天的不同时间访问会怎么样?我们希望
34943L
因为他访问了六次而算作六个用户吗?@Kevin耶!很抱歉忘了:)@Antti的答案在这种情况下更有效。