我有两个元组列表,我想按每个键(键,值)对总数进行分组。
请注意 key 142。
a = [(1713, 1L), (745, 1L), (142, 1L)]
b = [(1298, 1L), (620, 1L), (142, 1L)]
a_b = [(1713, 1L), (745, 1L), (1298, 1L), (620, 1L), (142, 2L)]
我正在尝试这个,但是当 b 中的 key 是新的时显然会失败:
d={}
for k,v in a:
for k1,v1 in b:
if k == k1:
print k
d[k] = v+v1
else:
d[k] = v
print d #{1713: 1L, 142: 2L, 745: 1L}
请您参考如下方法:
您可以通过反向迭代 a 和 b 的组合列表来使用 collections.OrderedDict,因为后者是重复键在您的合并逻辑中优先考虑,之后您可以通过再次反转 dict 项目列表来获得所需的元组列表:
from collections import OrderedDict
d = OrderedDict()
for k, v in reversed(a + b):
d[k] = d.get(k, 0) + v
a_b = d.items()[::-1]
a_b 变成:
[(1713, 1L), (745, 1L), (1298, 1L), (620, 1L), (142, 2L)]
编辑:由于您现在在评论中提到输出的顺序无关紧要,因此您可以像在问题中那样使用常规字典。这里的关键是遍历a和b的组合列表,使用dict.get方法默认a的初始值0 的键:
d = {}
for k, v in a + b:
d[k] = d.get(k, 0) + v
a_b = d.items()
