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的代码”。你的意思是把价值加在一起吗?