我将使用一个示例来解释我的问题:
A=[[1,2,10],[1,2,10],[3,4,5]]
B=[[1,2,30],[6,7,9]]
从这些列表列表中,我想创建第三个:
C=A+B
所以我得到:
C= [[1, 2, 10], [1, 2, 10], [3, 4, 5], [1, 2, 30], [6, 7, 9]]
请注意,在 中存在三个列表C
,这些 [1, 2, 10], [1, 2, 10], [1, 2, 30]
列表如果用 [x,y,z] 来描述,它们具有相同的 x,y 但不同的 z。
所以我想要这个新列表:
Averaged= [(1, 2, 16.666), (6, 7, 9), (3, 4, 5)]
我们从列表中只找到一次相同的 x,y
[1, 2, 30], [1, 2, 40], [1, 2, 50]
和相应 z 值的平均值(10+10+30)/3=16.666
我一开始尝试使用for
循环,但最终尝试使用defaultdict
.
我最终得到了这个保持一次 (x,y) 但添加而不是平均相应的 z 值:
from collections import defaultdict
Averaged=[]
A=[[1,2,10],[1,2,10],[3,4,5]]
B=[[1,2,30],[6,7,9]]
C=A+B
print "C=",C
ToBeAveraged= defaultdict(int)
for (x,y,z) in C:
ToBeAveraged[(x,y)] += z
Averaged = [k + (v,) for k, v in ToBeAveraged.iteritems()]
print 'Averaged=',Averaged
可以用defaultdict做到这一点吗?有任何想法吗?