如果我有以下列表列表,

[[212, -217], [210, -488], [210, 46]]


我想合并它们,以便添加其第一个成员相等的列表的第二个成员,并且合并条目,因此输出将是:

[[212, -217], [210, -442]]


做这个的最好方式是什么?我的尝试在下面,但是失败,因为y似乎总是空的:

d = [[212, -217], [210, -488], [210, 46]]
from itertools import groupby
ret = [[x, sum(y)] for x, y in groupby(d, key=lambda x: x[0])]

最佳答案

亲密无间,您可以使用zip压缩分组数字,然后使用map函数将setsum应用于您的货币对:

>>> from operator import itemgetter
>>> [map(sum,map(set,zip(*g))) for _,g in groupby(sorted(d, key=itemgetter(0)),key=itemgetter(0))]
[[210, -442], [212, -217]]


但是,您可以使用collections.defaultdict作为更Python化的方式:

>>> from collections import defaultdict
>>> dic=defaultdict(int)
>>> for i,j in d:
...   dic[i]+=j
...
>>> dic.items()
[(210, -442), (212, -217)]

10-08 04:32