[英]How to sum list of tuples?
I have a list of tuples: 我有一个元组列表:
[ (a,1), (a,2), (b,1), (b,3) ]
I want to get the sum of both the a
and b
values. 我想获取a
和b
值的总和。 The results should be in this format: 结果应采用以下格式:
[ { 'key' : a, 'value' : 3 }, {'key' : b, 'value' : 4 } ]
How can I do this? 我怎样才能做到这一点?
from itertools import groupby
[{'key': k, 'value': sum(v for _,v in g)} for k, g in groupby(sorted(lst), key = lambda x: x[0])]
# [{'key': 'a', 'value': 3}, {'key': 'b', 'value': 4}]
from collections import defaultdict
lst = [("a", 1), ("a", 2), ("b", 1), ("b", 3)]
out = defaultdict(list)
[out[v[0]].append(v[1]) for v in lst]
out = [{"key": k, "value": sum(v)} for k, v in out.iteritems()]
print out
You can use collections.Counter
to create a multiset from the initial list and then modify the result to match your case: 您可以使用collections.Counter
从初始列表创建一个多集 ,然后修改结果以符合您的情况:
from collections import Counter
lst = [('a', 1), ('a', 2), ('b', 1), ('b', 3)]
part = sum((Counter({i[0]: i[1]}) for i in lst), Counter())
# Counter({'b': 4, 'a': 3})
final = [{'key': k, 'value': v} for k, v in part.items()]
# [{'key': 'b', 'value': 4}, {'key': 'a', 'value': 3}]
Very similar to answers given already. 与已经给出的答案非常相似。 Little bit longer, but easier to read, IMHO. 恕我直言,更长一点,但更容易阅读。
from collections import defaultdict
lst = [('a', 1), ('a', 2), ('b', 1), ('b', 3)]
dd = defaultdict(int)
for name, value in lst:
dd[name] += value
final = [{'key': k, 'value': v} for k, v in dd.items()]
(last line copied from Moses Koledoye's answer) (最后一行摘自Moses Koledoye的答案)
from collections import Counter
a = [('a', 1), ('a', 2), ('b', 1), ('b', 3)]
c = Counter()
for tup in a:
c = c + Counter(dict([tup]))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.