我如何添加 Python 列表中不同列表的元组数量?

How can i add the numbers of tuples from different lists of a a list in Python?

这是我所拥有的(在 python 版本 3.7.4 中):

P= [[('Lista-A', 1), ('Lista-X', 1), ('Lista-Z', 4)], [('Lista-A', 2), ('Lista-X', 0), ('Lista-Z', 1)], [('Lista-A', 5), ('Lista-X', 1), ('Lista-Z', 0)], [('Lista-A', 0), ('Lista-X', 1), ('Lista-Z', 4)]]

我正在尝试对与 "Lista-A"、"Lista-X" 和 "Lista-Z" 相关的所有数字求和,这样我就可以得到这样的结果(只是一个元组列表,其中包含每个 "Lista"):

关联的数字总和
[('Lista-A', 8), ('Lista-X', 3), ('Lista-Z', 9)]

我试过使用 for 循环,但我没有成功。

for lista in P:
        for i in lista: 

我不知道如何继续代码...任何人都可以帮助我吗? 提前致谢!

如果 "list names" 总是以相同的顺序排列,您可以使用 zipsum:

的列表理解来做到这一点
>>> data = [[('Lista-A', 1), ('Lista-X', 1), ('Lista-Z', 4)], [('Lista-A', 2), ('Lista-X', 0), ('Lista-Z', 1)], [('Lista-A', 5), ('Lista-X', 1), ('Lista-Z', 0)], [('Lista-A', 0), ('Lista-X', 1), ('Lista-Z', 4)]]
>>> [(col[0][0], sum(x for _, x in col)) for col in zip(*data)]
[('Lista-A', 8), ('Lista-X', 3), ('Lista-Z', 9)]

zip(*data) 是从 "rows" 列表迭代 "columns" 的标准方法。假设这些列确实排成一行,那么每列都包含要为相同 "list name" 求和的所有数字。 sum 函数将数字相加;这些列包含我们想要对第二个组件中的数字求和的元组,因此解构赋值 _, x.

这应该有效

from collections import defaultdict

input = [[('Lista-A', 1), ('Lista-X', 1), ('Lista-Z', 4)], [('Lista-A', 2), ('Lista-X', 0), ('Lista-Z', 1)], [('Lista-A', 5), ('Lista-X', 1), ('Lista-Z', 0)], [('Lista-A', 0), ('Lista-X', 1), ('Lista-Z', 4)]]

d = defaultdict(int)
for i in input:
    for j in i:
        d[j[0]] += j[1]

res = list(d.items())

不是最优雅的"pythonic"方式,而是使用您的代码

new_lista = {}
for lista in p:
    for i in lista: 
        new_lista[i[0]] = new_lista.get(i[0], 0) + i[1]

p1 = [(k,v) for k,v in new_lista.items()]

导入后的单行代码很糟糕,但确实有效!

>>> from functools import reduce
>>> reduce(lambda x, y: dict((k, v + y[k]) for k, v in x.items()), [dict(i) for i in input])
{'Lista-A': 8, 'Lista-X': 3, 'Lista-Z': 9}