首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中分组

在Python中分组
EN

Stack Overflow用户
提问于 2016-02-05 20:25:45
回答 1查看 90关注 0票数 0

我有一个字典列表(我用CSV上传),我想根据其中一个“列”运行一个"group“等价物。我试图在teamID上分组,并根据这些分组对"R“列进行求和。

我正在尝试以下代码:

代码语言:javascript
复制
import itertools

for key, group in itertools.groupby(batting, lambda item: item["teamID"]):
    print key, sum([item["R"] for item in group])

然而,我没有看到他们正确地分组。将有多个相同的团队ID实例。

例如:

代码语言:javascript
复制
RC1 30
CL1 28
WS3 28
RC1 29
FW1 9
RC1 0
BS1 66
FW1 1
BS1 13
CL1 18
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-05 20:32:21

正如帕德里克在他的评论中所说,itertools.groupby()需要有序的数据来做你想做的事情。最简单的解决方案(至少在代码编辑中)是:

代码语言:javascript
复制
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可能是一个不错的选择。

代码语言:javascript
复制
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,代码可能需要稍作调整。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35232897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档