首页 > 解决方案 > 在python中根据条件索引添加子列表元素

问题描述

我有如下列表

a=[['a',1,2,1,3],['b',1,3,4,3],['c',1,3,4,3]]
b=[['b',1,3,4,3],['c',1,3,4,3]]

如果第一个子列表元素与其他列表子列表元素匹配,我想根据索引添加元素

尝试以下:

from operator import add 

res_list1=[]
    for a1 in a:
        for b1 in b:
            if a1[0]==b1[0]:
                res_list = [map(add, a1[1:], b1[1:])]
                res = [[a1[0],i,j,k,l] for i,j,k,l in res_list]
                res_list1.append(res[0])
            else:
                res_list=a1
                res_list1.append(res_list)

    print res_list1

但输出结果如下:

res_list1=[['a', 1, 2, 1, 3], ['a', 1, 2, 1, 3], ['b', 2, 6, 8, 6], ['b', 1, 3, 4, 3], ['c', 1, 3, 4, 3], ['c', 2, 6, 8, 6]]

但正确的输出应该是:

res_list1=[['a', 1, 2, 1, 3], ['b', 2, 6, 8, 6], ['c', 2, 6, 8, 6]]

标签: pythonpython-2.7

解决方案


这是一个itertools基于的方法:

from operator import itemgetter
from itertools import groupby, islice

l = sorted(a+b)
[[k] + [sum(i) for i in islice(zip(*v),1,None)] for k,v in groupby(l, key=itemgetter(0))]
# [['a', 1, 2, 1, 3], ['b', 2, 6, 8, 6], ['c', 2, 6, 8, 6]]

推荐阅读