Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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_List Comprehension - Fatal编程技术网

Python &引用;分组方式;具有字典理解的聚合函数

Python &引用;分组方式;具有字典理解的聚合函数,python,list-comprehension,Python,List Comprehension,我有一系列的配对(名字、分数)和重复出现的名字。我想得到每个名字的最高分数。对于最终结果,名称标签本身是可选的。这是一个工作实现: from collections import defaultdict scores = (('eyal', 76), ('alex', 50), ('oded', 90), ('eyal', 100), ('alex', 99)) distinct = defaultdict(set) for score in scores: distinct[score

我有一系列的配对(名字、分数)和重复出现的名字。我想得到每个名字的最高分数。对于最终结果,名称标签本身是可选的。这是一个工作实现:

from collections import defaultdict
scores = (('eyal', 76), ('alex', 50), ('oded', 90), ('eyal', 100), ('alex', 99))
distinct = defaultdict(set)
for score in scores:
    distinct[score[0]].add(score[1])
max_scores = [max(distinct[k]) for k in distinct]
print (max_scores)
我想知道,这可以通过词典理解一步完成吗

In [22]: dict(sorted(scores))
Out[22]: {'alex': 99, 'eyal': 100, 'oded': 90}
这是基于这样的观察:一旦我们对元组进行排序,我们只想为每个名称保留最后一个元组,
dict()
很好地做到了这一点

或者

In [16]: [max(vals) for _,vals in itertools.groupby(sorted(scores), lambda x:x[0])]
Out[16]: [('alex', 99), ('eyal', 100), ('oded', 90)]

这更冗长,但也更一般。例如,它可以很容易地用来计算平均分数,而第一个解决方案却不能。

我理解想要减少代码的愿望,但你不可能给其他人带来维护噩梦吗?
dict(排序(分数))
应该在一行中完成这项任务。[该死的我跑得快;)]
dict(排序(分数))
。[哇,4秒太慢了!]我也喜欢
groupby
解决方案——它可以更好地扩展到更复杂的问题,尽管乍一看它没有那么流畅。很好。我用timeit测试了性能:op=45.6,groupby=59.6,dict(sorted)=13.5,