我有一个字典列表(我使用CSV上传),我想通过"运行一个"组。相当于基于"列之一"。我正在尝试对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
答案 0 :(得分:0)
正如Padric在评论中所说,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稍作调整。