python求列表每列之和_列表中每个元素的列表中的和列

将第一列中的项目分组到字典中,^{}使其更容易:from collections import defaultdict

sums = defaultdict(int)

for tup in l:

sums[tup[0]] += int(tup[1])

defaultdict如果键不存在,则调用传入的工厂以生成默认值(int在本例中,生成一个0):

^{pr2}$

演示:>>> l=[['A1','1','2'],['A1','1','2'],['A1','3','3'],['B1','1','2'],['B1','5','5']]

>>> from collections import defaultdict

>>> sums = defaultdict(int)

>>> for tup in l:

... sums[tup[0]] += int(tup[1])

...

>>> sums

defaultdict(, {'B1': 6, 'A1': 5})

那么,打印总和的方法很简单:for key in sorted(sums):

print 'sum{}={}'.format(key, sums[key])

如果您的输入列表是按排序的,请使用itertools.groupby():from itertools import groupby

from operator import itemgetter

sums = {key: sum(int(t[1]) for t in group) for key, group in groupby(l, key=itemgetter(0))}

演示:>>> from itertools import groupby

>>> from operator import itemgetter

>>> {key: sum(int(t[1]) for t in group) for key, group in groupby(l, key=itemgetter(0))}

{'B1': 6, 'A1': 5}

实际上,使用排序列表和groupby可以直接切换到打印:for key, group in groupby(l, key=itemgetter(0)):

print 'sum{}={}'.format(key, sum(t[1]) for t in group))

如果没有外部模块,我只需要一个字典;这将比上述任何一个选项都慢:sums = {}

for tup in l:

sums[tup[0]] = sums.get(tup[0], 0) + int(tup[1])

或者,对于已排序的变量:sum, last = 0, l[0][0]

for tup in l:

key = tup[0]

if last != key and sum:

print 'sum{}={}'.format(last, sum)

sum, last = 0, key

sum += int(tup[1])

if sum:

print 'sum{}={}'.format(key, sum)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值