我有一个字典列表(我用CSV上传),我想根据其中一个“列”运行一个"group“等价物。我试图在teamID上分组,并根据这些分组对"R“列进行求和。
我正在尝试以下代码:
import itertools
for key, group in itertools.groupby(batting, lambda item: item["teamID"]):
print key, sum([item["R"] for item in group])然而,我没有看到他们正确地分组。将有多个相同的团队ID实例。
例如:
RC1 30
CL1 28
WS3 28
RC1 29
FW1 9
RC1 0
BS1 66
FW1 1
BS1 13
CL1 18发布于 2016-02-05 20:32:21
正如帕德里克在他的评论中所说,itertools.groupby()需要有序的数据来做你想做的事情。最简单的解决方案(至少在代码编辑中)是:
import itertools
key_func = lambda item: item["teamID"]
for key, group in itertools.groupby(sorted(batting, key=key_func), key_func):
print key, sum([item["R"] for item in group])如果您的数据相对较大,您可能需要考虑一些更有效的方法,即不需要在内存中复制排序副本。评论中提到的defaultdict可能是一个不错的选择。
from collections import defaultdict
d = defaultdict(int)
for item in batting:
d[item['teamID']] += item.get('R', 0) or 0
for team, r_sum in sorted(d.items(), key=lambda x: x[0]):
print team, r_sum对于Python 3,代码可能需要稍作调整。
https://stackoverflow.com/questions/35232897
复制相似问题