我有多个列表,比方说:
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]]