如何在子列表之间连接值

时间:2017-12-01 01:11:22

标签: python

我有一个包含子列表的列表,例如:

LA=[[1,2],[2,7],[4,5],[1,9],[6,5],[4,3],[2,1],[2,2]]

如果每个子列表中的第一个元素是一个ID,我如何加入具有相同ID的ID以获得如下内容:

LR=[[1,11],[2,10],[4,8],[6,5]]

我尝试使用for循环,但它太长而且效率不高。

4 个答案:

答案 0 :(得分:2)

您可以使用itertools.groupby

import itertools
LA=[[1,2],[2,7],[4,5],[1,9],[6,5],[4,3],[2,1],[2,2]]
new_d = [[a, sum(i[-1] for i in list(b))] for a, b in itertools.groupby(sorted(LA), key=lambda x:x[0])]

输出:

[[1, 11], [2, 10], [4, 8], [6, 5]]

答案 1 :(得分:2)

GET "samplesite.com/page.php" RETURN "contents"

也会完成这项工作

答案 2 :(得分:2)

您只需使用列表推导即可:

LR = [[i,sum([L[1] for L in LA if L[0]==i])] for i in set([L[0] for L in LA])]

给出了理想的结果。

为了解决这个问题set([L[0] for L in LA])给出了所有ID的集合(没有重复),然后我们简单地对该集合进行迭代并对具有该ID的值求和。

答案 3 :(得分:1)

使用collections.defaultdict()进行分组总是很简单:

from collections import defaultdict

LA = [[1,2],[2,7],[4,5],[1,9],[6,5],[4,3],[2,1],[2,2]]

# create defaultdict of list values
d = defaultdict(list)

# loop over each list
for sublist in LA:

    # group by first element of each list
    key = sublist[0]

    # add to dictionary, each key will have a list of values
    d[key].append(sublist)

# definitely can be more readable
result = [[key, sum(x[1] for x in [y for y in value])] for (key, value) in sorted(d.items())]
print(result)

输出:

[[1, 11], [2, 10], [4, 8], [6, 5]]