簡體   English   中英

如何根據defaultdict中的鍵累積值

[英]how to accumulate the value according to the key in a defaultdict

如果我有一個 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)

原來的帖子有點令人困惑:這些例子看起來像一個多圖而不是一個列表的字典。

我假設您有一個包含數字列表的 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?

作為參考,您可以更優雅地執行此操作:

d2 = defaultdict(float)
for k, v in d.iteritems():
    d2[k] += v

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM