如果我有以下列表列表,
[[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
函数将set
和sum
应用于您的货币对:
>>> 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)]