基于索引比较对索引列表求和

2024-04-29 05:54:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个列表,比如:

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,但无法完成

有人能帮忙吗


Tags: 元素map列表functionlistxxxt1t3
2条回答

您可以使用^{} arrays的中间^{}来创建某种服装计数器:

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]]

Try(不需要外部库)

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]]

相关问题 更多 >