python 筛选 加字段,Python列表组并加总更多字段

I have a list with two integer fields which I would like to sum (string,integer, integer)

myList= [[["26-07-2017",2,0], ["26-07-2017",3,0], ["27-07-2017",1,0], ["27-07-2017",0,1]]]

Now I would like to group by date and sum the int fields. So the output should be like this:

sumList= [[["26-07-2017",5,0], ["27-07-2017",1,1]]]

How can I accomplish this? Thank you for the answer.

解决方案

You can use itertools.groupby to group the items on the date, then use reduce to sum numbers in each group:

from itertools import groupby

lst = [[k] + reduce(lambda x, y: [y[1]+x[1], y[2]+x[2]], g)

for k, g in groupby(myList[0], lambda x: x[0])]

print [lst]

# [[['26-07-2017', 5, 0], ['27-07-2017', 1, 1]]]

Python 3 requires importing reduce: from functools import reduce

You could avoid using the relatively less intuitve reduce (also in submission to GvR) by taking the sums in a for loop:

from itertools import groupby

lst = []

for k, g in groupby(myList[0], lambda x: x[0]):

g = [sum(d) for d in zip(*(t[1:] for t in g))]

lst.append([k] + g)

print [lst]

# [[['26-07-2017', 5, 0], ['27-07-2017', 1, 1]]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值