我有一个包含子列表的列表,例如:
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
循环,但它太长而且效率不高。
答案 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]]