用Python分组

时间:2016-02-05 20:25:45

标签: python

我有一个字典列表(我使用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

1 个答案:

答案 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稍作调整。