合并和添加嵌套列表

问题描述 投票:0回答:3

现在,我有一个嵌套列表,我需要一个函数来创建一个新列表,该列表将元素0和元素1相同时组合在一起。如果它们相同,则还将第三个元素加在一起。

样本输入:

input_list = [['123', '6', '2'], ['123','4','55'], ['123','6','3']

预期输出:

output_list = [['123','6','5'], ['123','4','55']]

123和6相同,因此将它们合并,然后2 + 3 = 5

123,4,55没有任何重复,因此保持不变

谢谢你前进

python nested-lists
3个回答
1
投票

针对此问题,因为内部列表中位于位置0和1的元素必须相同,才能将第三个值加在一起,然后显示结果,因此,所有需要做的就是对前两个值进行哈希处理,如果有重复出现,则添加该哈希对的值。

在python dict中提供了此功能,因此您可以以这种方式实现

input_list = [['123', '6', '2'], ['123','4','55'], ['123','6','3']]

res = {}

for i in input_list:
    if (i[0], i[1]) not in res:
        res.update({(i[0], i[1]):int(i[2])})
    else:
        res[(i[0],i[1])]+=int(i[2])

output_list = [[k[0],k[1], str(v)] for k,v in res.items()]

print(output_list)

输出

[['123', '6', '5'], ['123', '4', '55']]

0
投票

您可以使用字典聚合同一键的值,并使用列表推导从字典构建所需的输出列表:

output = {}
for *key, value in input_list:
    key = tuple(key)
    output[key] = output.get(key, 0) + int(value)
output_list = [[*key, str(value)] for key, value in output.items()]

output_list变为:

[['123', '6', '5'], ['123', '4', '55']]

0
投票

由于您已经解释说,您需要指导而不是完整的答案,所以我将发表我以前的评论以及一些额外的讨论。

对我来说,解决方案是一次使用pop()取出一个元素,然后通过迭代并检查具有[0]和[1]的其余元素来查看其余输入项目。

[如果有,我还将pop()该元素,将第三个元素加起来并完成迭代。完成后,结果元素将进入输出列表。

然后重复,直到输入中没有更多元素。

[该算法背后的思想,我想在这里给出另一个答案,试图避免对同一元素进行多次处理。从处理的角度来看,任何不使用完整嵌套循环的解决方案都是可以的。

© www.soinside.com 2019 - 2024. All rights reserved.