Skip to main content
 首页 » 编程设计

python之两个按键分组的元组列表中的值求和

2025年05月04日14luoye11

我有两个元组列表,我想按每个键(键,值)对总数进行分组。

请注意 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()