Python 如何在子列表之间连接值

Python 如何在子列表之间连接值,python,Python,我有一个包含子列表的列表,例如: LA=[[1,2],[2,7],[4,5],[1,9],[6,5],[4,3],[2,1],[2,2]] 如果每个子列表中的第一个元素是一个ID,那么如何将具有相同ID的元素连接起来以获得如下结果: LR=[[1,11],[2,10],[4,8],[6,5]] 我尝试过使用for循环,但它太长而且效率不高。您可以使用itertools。groupby: import itertools LA=[[1,2],[2,7],[4,5],[1,9],[6,5],[4

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

LA=[[1,2],[2,7],[4,5],[1,9],[6,5],[4,3],[2,1],[2,2]]
如果每个子列表中的第一个元素是一个ID,那么如何将具有相同ID的元素连接起来以获得如下结果:

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

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

您可以使用
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, 11], [2, 10], [4, 8], [6, 5]]

也会做这项工作

您只需使用列表理解即可:

LR = [[i,sum([L[1] for L in LA if L[0]==i])] for i in set([L[0] for L in LA])]
给出了期望的结果

要分解这一点,一个bit
集合([L[0]表示LA中的L])
给出了一个所有ID的集合(没有重复),然后我们简单地对该集合进行计数,并对同样具有该ID的值求和。

分组总是很简单的:

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]]
[[1, 11], [2, 10], [4, 8], [6, 5]]

这听起来像是一个求和的工作。搜索如何在
dict
中累积值。欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。显示您自己的代码并解释“加入具有相同ID的代码”。你的意思是把价值加在一起吗?