2

defaultdict(list)がある場合

d =defaultdict(list)
such as 1: 0
        1:0.2
        1: 0.3
        2: 0.2
        2: 0.4
        2: 0.1

......どのように私がそれを同様のdefaultdict(list)に変換するか、その値は同じキーを持つ最初のdictの値の累積ですが、1より大きくなることはありません

        1: 0
        1: 0.2
        1: 0.5
        2: 0.2
        2: 0.6
        2: 0.7 
         .....

私は今のところ次のコードしか持っていません、それは完全に正しくありません:-(

 d2 = defaultdict(list)
 for k in d.iterkeys()
          v +=d(k)
          d2[k]. append(v)
4

2 に答える 2

1

元の投稿は少し紛らわしいです。例はリストの口述ではなく、マルチマップのように見えます。

数値のリストを含むdefaultdictがあり、各リストの値の累積合計を含む新しいdefaultdictを作成したいとします。これを試して:

d2 = defaultdict(list)
for k, v in d.iteritems():
    sum = 0.0
    v2 = []
    for x in v:
        sum += x
        v2.append(sum)
    d2[k] = v2

新しい値を追加しても、新しいdefaultdictは累積合計を自動計算しないことに注意してください。

numpyのようなライブラリがインストールされている場合はnumpy.cumsum、Pythonループを使用する代わりに、累積合計を計算するために使用できます。

「1より大きくならない」とはどういう意味か、私にはわかりません。累積合計が1に達した後、要素を無視しますか?1より大きい個々の値を無視しますが、合計が1を超えても、小さい値を累積し続けますか?各出力リストに同じ数の要素を含めたいが、要素の値を1に制限しますか?

于 2013-02-18T23:49:51.107 に答える
0

参考までに、これをよりエレガントに行うことができます。

d2 = defaultdict(float)
for k, v in d.iteritems():
    d2[k] += v
于 2020-09-25T09:56:01.370 に答える