有效地使用python groupby或defaultdict?

时间:2016-05-26 07:52:59

标签: python-2.7 group-by defaultdict

我有一个名字,角色,多年经验的csv。我想创建一个元组列表,为所有员工聚合(name, role1, total_exp_inthisRole)。 到目前为止,我可以使用defaultdict执行以下操作

 import csv, urllib2
from collections import defaultdict 

response = urllib2.urlopen(url)
cr = csv.reader(response)
parsed = ((row[0],row[1],int(row[2])) for row in cr)    
employees =[]
for item in parsed:
    employees.append(tuple(item))
employeeExp = defaultdict(int)
for x,y,z in employees: # variable unpacking
    employeeExp[x] += z    
employeeExp.items()

输出:[('Ken', 15), ('Buckky', 5), ('Tina', 10)]

但我如何使用第二列也达到我想要的结果。我可以尝试通过groupby多个键或更简单的方法来解决吗?提前全部谢谢。

1 个答案:

答案 0 :(得分:1)

您只需将名称和角色元组传递给defaultdict,而不只传递一个项目:

for x,y,z in employees:
    employeeExp[(x, y)] += z 

为您的第二个预期输出([('Ken', ('engineer', 5),('sr. engineer', 6)), ...]

您需要再次汇总上述代码段的结果,但这次您需要使用带有列表的defaultdict

d = defaultdict(list)

for (name, rol), total_exp_inthisRole in employeeExp.items():
    d[name].append(rol, total_exp_inthisRole)