[英]How to subtract the last number/element in a separate list of tuples having multiple criteria?
[英]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.