【问题标题】:Python sum values in tuple in a list in a dictionary?字典中列表中元组中的Python总和值?
【发布时间】:2026-01-30 15:45:02
【问题描述】:

在我的字典中,每个条目都有一个元组列表(我的python语法可能是错误的,请多多包涵)。它看起来像这样:

{1: [(2, 2), (4, 3), (6, 1), (7, 1), (8, 3)], 2: [(4, 1), (5, 3), (1, 2)],...}

我想对每个条目的元组中的第二个值求和,即:

{1: (10), 2: (5)...}

我一直在使用不同形式的

result = sum(y for v in dict.itervalues() for (x, y) in v)

但它会将两个条目的所有值相加。

【问题讨论】:

  • {k: sum(x for _, x in v) for k, v in dict.items()}
  • 请注意,值上的括号不会使其成为元组,与:{1: 10, 2: 5...}
  • @vauth 不错的答案!
  • @vaultah,你为什么不把这个作为一个真正的答案?

标签: python dictionary tuples


【解决方案1】:

你可以这样做:

编辑:感谢@vaultah 的评论。

a = {1: [(2, 2), (4, 3), (6, 1), (7, 1), (8, 3)], 2: [(4, 1), (5, 3), (1, 2)]}
final = {k:(sum(j for _,j in v),) for k,v in a.items()}
print(final)

Output:

>>> {1: (10,), 2: (6,)}

【讨论】:

  • 即使假设 OP 想要将总和保存在一个元组中,也不值得调用 tuple 构造函数。 (sum(j for _,j in v),) 也可以。
  • 哦,是的!我不知道我可以在元组中做这样的事情!很棒的评论!谢谢。我将编辑我的答案。
【解决方案2】:
sum = 0
for item in dict:
    for _,x in dict[item]:
        sum = sum + x
    print sum

【讨论】:

    【解决方案3】:

    使用map/lambda 解决它的另一种方法:

    result = {k: sum(map(lambda x: x[1], v)) for k, v in dict.items()}
    

    【讨论】: