首页 > 解决方案 > 按元组的第二个和第三个值对三元素元组的列表进行排序和计数

问题描述

我有这样的元组列表

l =[(1, 'project1', 'errorMessage1'), 
    (2, 'project1', 'errorMessage1'), 
    (3, 'project2', 'errorMessage1'),
    (1, 'project3', 'errorMessage2')]

我希望第一列包含具有不同项目和错误消息的所有值的总和,如下所示:

[(3, 'project1', 'errorMessage1'),
 (3, 'project2', 'errorMessage1'),
 (1, 'project3', 'errorMessage3')]

我尝试了 Counter 和其他一些东西,但不知道我应该如何处理这个问题。

标签: pythonpython-3.xlistsumtuples

解决方案


您可以使用字典来保存计数的总和来解决此问题:

l =[(1, 'project1', 'errorMessage1'), 
    (2, 'project1', 'errorMessage1'), 
    (3, 'project2', 'errorMessage1'),
    (1, 'project3', 'errorMessage2')]

d = {}

for t in l:
    if t[1:] in d:
        d[t[1:]] += t[0]
    else:
        d[t[1:]] = t[0]

输出:

>>> d
{('project1', 'errorMessage1'): 3,
 ('project2', 'errorMessage1'): 3,
 ('project3', 'errorMessage2'): 1}

添加列表推导以重新格式化结果:

>>> [(v, *k) for k, v in d.items()]
[(3, 'project1', 'errorMessage1'),
 (3, 'project2', 'errorMessage1'),
 (1, 'project3', 'errorMessage2')]

推荐阅读