samplelist1 = [('A', 'Pass', 20), ('A', 'Failed', 5), ('B', 'Pass', 10), ('B', 'Failed', 5) ]
samplelist2 = [('A', 'Pass', 2), ('A', 'Failed', 1), ('B', 'Failed', 2)]
# Expected Output: result = [('A', 'Pass', 18), ('A', 'Failed', 4), ('B', 'Pass', 10), ('B', 'Failed', 3)
我还能用这个代码吗???使用此代码作为我的参考
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)
您当前的代码将不起作用,因为它使用samplelist
,但您的数据仅包含samplelist1
和samplelist2
。我假设这是一个错误,您忘记包含迭代示例列表的循环。
无论如何,我认为您不需要defaultdict
. 只需 traverse samplelist1
,在字典中设置值,然后 traverse samplelist2
,并从字典中减去值。
samplelist1 = [('A', 'Pass', 20), ('A', 'Failed', 5), ('B', 'Pass', 10), ('B', 'Failed', 5) ]
samplelist2 = [('A', 'Pass', 2), ('A', 'Failed', 1), ('B', 'Failed', 2)]
d = {}
for x, y, z in samplelist1:
d[x, y] = z
for x, y, z in samplelist2:
d[x, y] -= z
result = [(k1, k2, v) for (k1, k2), v in d.items()]
print(result)
如果我们真的想使用 a defaultdict
,我们可以修改您的方法,首先收集列表中的项目,然后从第二个项目中减去第一个项目(如果存在多个元素):
from collections import defaultdict
samplelist1 = [('A', 'Pass', 20), ('A', 'Failed', 5), ('B', 'Pass', 10), ('B', 'Failed', 5) ]
samplelist2 = [('A', 'Pass', 2), ('A', 'Failed', 1), ('B', 'Failed', 2)]
d = defaultdict(list)
for samplelist in (samplelist1, samplelist2):
for x, y, z in samplelist:
d[x, y].append(z)
result = [(k1, k2, v[0] - v[1] if len(v) > 1 else v[0]) for (k1, k2), v in d.items()]
print(result)
输出:
[('A', 'Pass', 18), ('A', 'Failed', 4), ('B', 'Pass', 10), ('B', 'Failed', 3)]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句