繁体   English   中英

如何总结具有多个条件的元组列表中的最后一个数字/元素?

[英]How to sum-up the last number/element in the list of tuples having multiple criteria?

samplelist = [('A', 'Pass', 10), ('A', 'Pass', 20), ('A', 'Failed', 5), ('B', 'Pass', 10) , ('B', '通过', 5) ]

预期 output = [('A', 'Pass', 30), ('A', 'Failed', 5), ('B', 'Pass', 15) ]

我将此代码用作我的参考,但仍然无法使其工作:

samplelist = [('A', 'Pass', 10), ('A', 'Pass', 20), ('A', 'Failed', 5), ('B', 'Pass', 10), ('B', 'Pass', 5) ]

i used this code as my reference but still cant get it to work :


from collections import defaultdict

d = defaultdict(int)
for letter, value in samplelist:
    d[letter] += value
res = list(d.items())
print(res)
# expected output = [('A', 'Pass', 30), ('A', 'Failed', 5), ('B', 'Pass', 15) ]

由于列表中的每个元组中有 3 个元素,因此您需要 3 个变量来解包这些元素:

samplelist = [('A', 'Pass', 10), ('A', 'Pass', 20), ('A', 'Failed', 5), ('B', 'Pass', 10), ('B', 'Pass', 5) ]

from collections import defaultdict

d = defaultdict(int)
for letter, status, value in samplelist:
    d[(letter, status)] += value
res = [key + (val,) for key, val in d.items()] # convert to required format
print(res) 

结果:

[('A', 'Pass', 30), ('A', 'Failed', 5), ('B', 'Pass', 15)]

您遇到此问题是因为:

  • 要形成的关键是第一项和第二项的组合。 您没有仅包含letter的分组键(这也会在前面抛出错误: 'too many values to unpack' )。

使用groupby可以更轻松地解决此问题,因为所有组似乎都是相邻的:

[k + (sum(x[2] for x in g),) for k, g in groupby(samplelist, key=lambda x: x[:-1])]

代码

from itertools import groupby

res = [k + (sum(x[2] for x in g),) for k, g in groupby(samplelist, key=lambda x: x[:-1])]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM