Python 如何对元组列表求和?

Python 如何对元组列表求和?,python,Python,我有一个元组列表: [ (a,1), (a,2), (b,1), (b,3) ] 我想得到a和b值的总和。结果应采用以下格式: [ { 'key' : a, 'value' : 3 }, {'key' : b, 'value' : 4 } ] 如何执行此操作?您可以使用从初始列表创建,然后修改结果以匹配您的案例: from itertools import groupby [{'key': k, 'value': sum(v for _,v in g)} for k, g in groupb

我有一个元组列表:

[ (a,1), (a,2), (b,1), (b,3) ]
我想得到
a
b
值的总和。结果应采用以下格式:

[ { 'key' : a, 'value' : 3 }, {'key' : b, 'value' : 4 } ]
如何执行此操作?

您可以使用从初始列表创建,然后修改结果以匹配您的案例:

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 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}]
您可以使用从初始列表创建,然后修改结果以匹配您的案例:

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}]

与已经给出的答案非常相似。稍长一点,但更容易阅读,伊姆霍

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()]

(最后一行摘自摩西·科雷多耶的答案)

与前面给出的答案非常相似。稍长一点,但更容易阅读,伊姆霍

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()]

(最后一行摘自摩西·科莱多耶的答案)

您是否看过《收藏》中的内容。可能重复的内容与您在一个非常相似的主题上解决问题的方式大致相同,但数据的呈现方式略有不同。你也可以在StackOverflow上通过谷歌搜索任何一个问题标题来找到这个解决方案。你是否在
集合
中查看过。可能重复的方法与你在一个非常相似的主题上解决的方法大致相同,但数据的呈现方式略有不同。你也可以在StackOverflow上通过谷歌搜索问题标题找到这个解决方案。