python读取字典的值并求和_在python中对嵌套字典值求和

你想在这里使用一个列表,你想要使用Counter()对象来使得求和更容易:

from collections import Counter

from itertools import izip_longest

for dcts in data.values():

for i,dct in enumerate(dcts):

if i >= len(result):

result.append(Counter(dct))

else:

result[i].update(dct)

结果:

>>> result

[Counter({'a': 10,'b': 7}),Counter({'b': 18,'a': 11}),Counter({'a': 12,'b': 5}),Counter({'b': 11,'a': 5}),Counter({'b': 9,'a': 4}),Counter({'a': 3,'b': 2}),Counter({'a': 1,'b': 0})]

Counter()对象是dict的子类,因此它们表现为字典.如果之后必须有dict值,请添加以下行:

result = [dict(r) for r in result]

从Eric那里获取灵感,您可以将上述内容转化为单行:

from collections import Counter

from itertools import izip_longest

result = [sum(map(Counter,col),Counter())

for col in izip_longest(*data.values(),fillvalue={})]

这个版本与上面的循环略有不同,因为在求和时从计数器中删除了0的键.如果你想在最后一个计数器中保持’b’:0,请使用:

[reduce(lambda c,d: c.update(d) or c,col,Counter())

for col in izip_longest(*data.values(),fillvalue={})]

这再次使用.update().

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值