如果第一个元素相同,则添加两个子列表

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

我是python的初学者,如果子列表的第一个元素相同,我会尝试添加两个子列表。子列表的数量也不是常数。

我尝试遍历每个元素。但是,它再次与列表中的所有元素进行比较

在此处输入代码

Input_list = [['A', 50, 10, 10, 10], ['B', 50, 40, 30, 70], ['C', 50, 20, 40, 30], ['A', 20, 20, 20, 20]]
Expected_list = [['A', 70, 30, 30, 30], ['B', 50, 40, 30, 70], ['C', 50, 20, 40, 30]]

for i in range(0, len(Input_list)):
for j in range(0, len(Input_list)):
    if Input_list[i][0] == Input_list[j][0]:
        print("True")
python python-3.x list
2个回答
0
投票

这里是一种方法:

from operator import add

input_list = [['A', 50, 10, 10, 10], ['B', 50, 40, 30, 70], ['C', 50, 20, 40, 30], ['A', 20, 20, 20, 20]]

out = {}
for l in input_list:
    n = len(l)
    key = l[0]
    vals = [key] + list( map(add, l[1:n], out.get(key, [0]*n)[1:n]) )
    out[key] = vals

这使用字典来跟踪子列表:

In [24]: out
Out[24]:
{'A': ['A', 70, 30, 30, 30],
 'B': ['B', 50, 40, 30, 70],
 'C': ['C', 50, 20, 40, 30]}

out.values()产生您想要的东西:

In [25]: out.values()
Out[25]: dict_values([['A', 70, 30, 30, 30], ['B', 50, 40, 30, 70], ['C', 50, 20, 40, 30]])

0
投票

如果列表具有相同的键,则可以将列表转换为字典并添加值。

nested_lists = [['A', 50, 10, 10, 10], ['B', 50, 40, 30, 70], ['C', 50, 20, 40, 30], ['A', 20, 20, 20, 20]]
dict = {}
for _list in nested_lists:
    key = _list[0]
    val = _list[1: ]
    if key in dict:
       dict[key] = [a + b for a, b in zip(dict[key], val)]
    dict.setdefault(key, val)
© www.soinside.com 2019 - 2024. All rights reserved.