合并两个列表:具有相似键的聚合值

kn3*_*n3l 0 python

我有两个或更多的列表.有点像这样:

listX = [('A', 1, 10), ('B', 2, 20), ('C', 3, 30), ('D', 4, 30)]
listY = [('a', 5, 50), ('b', 4, 40), ('c', 3, 30), ('d', 1, 20), 
         ('A', 6, 60), ('D', 7, 70])
Run Code Online (Sandbox Code Playgroud)

我想获得移动这样的重复元素的结果:我的结果是从listX + listY获取所有列表,但是在重复的情况下,例如('A', 1, 10), ('D', 4, 30)listX 的元素被呈现或者在listY中退出.结果就这样吧

result = [('A', 7, 70), ('B', 2, 20), ('C', 3, 30), ('D', 11, 100),
          ('a', 5, 50), ('b', 4, 40), ('c', 3, 30), ('d', 1, 20)]
Run Code Online (Sandbox Code Playgroud)

(A, 7, 70)通过添加('A', 1, 10)('A', '6', '60')一起获得

任何人都可以帮我解决这个问题.谢谢.

Dan*_*man 8

如果你使用字典,这很容易.

combined = {}
for item in listX + listY:
    key = item[0] 
    if key in combined:
        combined[key][0] += item[1]
        combined[key][1] += item[2]
    else:
        combined[key] = [item[1], item[2]]

result = [(key, value[0], value[1]) for key, value in combined.items()]
Run Code Online (Sandbox Code Playgroud)