基于索引比较对按索引排列的列表求和



我有多个列表,比方说:

t1 = ['ABC', 100, 20]
t2 = ['XXX', 200, 35]
t3 = ['ABC', 500, 90]
t4 = ['XXX', 100, 15]

只有当第一个元素相等时,我才想对所有列表中的第二个和第三个元素求和,结果是:

list = [['ABC', 600, 110], ['XXX', 300, 50]]

尝试使用map() function,但无法完成。

有人能帮忙吗?

尝试(不需要外部库(

from collections import defaultdict
t1 = ['ABC', 100, 20]
t2 = ['XXX', 200, 35]
t3 = ['ABC', 500, 90]
t4 = ['XXX', 100, 15]
t_lst = [t1,t2,t3,t4]

d = defaultdict(lambda: [0, 0])
for t in t_lst:
d[t[0]][0] += t[1]
d[t[0]][1] += t[2]
final = [[k,v[0],v[1]] for k,v in d.items()]
print(final)

输出

[['ABC', 600, 110], ['XXX', 300, 50]]

您可以使用numpy数组的中间defaultdict来创建某种服装计数器:

from collections import defaultdict
import numpy as np
lists = [['ABC', 100, 20], ['XXX', 200, 35], ['ABC', 500, 90], ['XXX', 100, 15]]
res = defaultdict(lambda: np.array([0, 0]))
for l in lists:
res[l[0]] += l[1:]
print(res)
print([[key] + list(vals) for key, vals in res.items()])

提供:

{'ABC': array([600, 110]), 'XXX': array([300,  50])}
[['ABC', 600, 110], ['XXX', 300, 50]]

最新更新