比较 2 个数组并写入 python 中的第三个的最有效方法

Most effective way to compare 2 arrays and write to third in python

我的数组是:

array a = [[123, 'a', 'b', 'd'], [253, 'f', 'c'], [322, 's', 'b']]

//每个子数组包含序列号。和字符串。

array b = [['a', 2], ['s', 4], ['b', 1]]

// 每个子数组包含字符串和分数。

要求的结果是:

array result = [[123, 3],[322, 5]] 

//每个子数组包含序列号。来自数组 a 和根据其中的字符串的分数总和以及它们来自数组 b 的分数(如果分数为零,则不要写入结果数组)

我知道如何使用数组 ab 的嵌套 for 循环并将其求和并附加到数组 result,但我想知道是否有更有效的方法,就像使用字典一样。或其他。

谢谢!

尝试:

array_a = [[123, "a", "b", "d"], [253, "f", "c"], [322, "s", "b"]]
array_b = [["a", 2], ["s", 4], ["b", 1]]

tmp = dict(array_b)

out = [
    [id_, s]
    for id_, *vals in array_a
    if (s := sum(tmp.get(v, 0) for v in vals)) != 0
]
print(out)

打印:

[[123, 3], [322, 5]]

您还可以使用字典理解和列表理解:

a = [[123, 'a', 'b', 'd'], [253, 'f', 'c'], [322, 's', 'b']]
b = [['a', 2], ['s', 4], ['b', 1]]
b_dict = {part[0]:part[1] for part in b}
result = [part for part in [[elem[0], sum([b_dict.get(string, 0) for string in elem[1:]])] for elem in a] if part[1]]

result 的值现在是:

[[123, 3], [322, 5]]