例を使用して問題を説明します。
A=[[1,2,10],[1,2,10],[3,4,5]]
B=[[1,2,30],[6,7,9]]
これらのリストのリストから、3番目のリストを作成したいと思います。
C=A+B
だから私は得る:
C= [[1, 2, 10], [1, 2, 10], [3, 4, 5], [1, 2, 30], [6, 7, 9]]
C
の中に 3つのリストがあることに注意してください。これらの[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つだけ見つかります
[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でこれを行うことは可能ですか?何か案は?