简体   繁体   English

如何汇总元组列表?

[英]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. 我想获取ab值的总和。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM