簡體   English   中英

按鍵對 Python 字典值求和

[英]Sum Python dictionary values by key

我正在嘗試按日期匯總來自健康應用程序的數據。 每個日期都有多個條目,因此我創建了一個字典,其中每個唯一日期作為鍵(列索引1 ),並且我想將每個日期的脂肪總量(列索引7 )添加為值。

我是 Python 的新手,並嘗試在純 Python 中執行此操作,而不是使用 NumPy 等。非常感謝任何幫助。

['18600018', '05-31-2020', 'Dinner', 'salmon', '1 serving', '210.0000000005', '-0.0694999987329796', '14.000000004', '2.999999996', '', '', '', '54.9999999975', '469.9999999995', '', '', '', '', '', '', '20.9999999975', '', '', '', '4.799999997', '', '', '', '', '', '', '', '', '', '', '', '0.3599999985', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']

到目前為止,我有這個 for 循環來增加字典並收到以下錯誤:

fat_dict = {}
for row in data:
    date = row[1]
    fat = row[7]
    if date in fat_dict:
        fat_dict[date] = fat
    else:
        fat_dict[date] += fat


KeyError                                  Traceback (most recent call last)
<ipython-input-3-dfbce568de95> in <module>
     80         fat_dict[date] = fat
     81     else:
---> 82         fat_dict[date] += fat
     83 
     84 

KeyError: '05-31-2020'

理想的結果將是每個唯一日期(鍵)以及該日期(值)的脂肪總和。

在這里它和它的工作

data=[['18600018', '05-31-2020', 'Dinner', 'salmon', '1 serving', '210.0000000005', '-0.0694999987329796', '14.000000004', '2.999999996', '', '', '', '54.9999999975', '469.9999999995', '', '', '', '', '', '', '20.9999999975', '', '', '', '4.799999997', '', '', '', '', '', '', '', '', '', '', '', '0.3599999985', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''],['18600018', '05-31-2020', 'Dinner', 'salmon', '1 serving', '210.0000000005', '-0.0694999987329796', '15.000000004', '2.999999996', '', '', '', '54.9999999975', '469.9999999995', '', '', '', '', '', '', '20.9999999975', '', '', '', '4.799999997', '', '', '', '', '', '', '', '', '', '', '', '0.3599999985', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']]
fat_dict = {}
for row in data:
    date = row[1]
    fat = row[7]
    if date in fat_dict:
       fat_dict[date] +=float(fat)
    else:
        fat_dict[date]=float(fat)
print(fat_dict)

OUTPUT:

{'05-31-2020': 29.000000008}

其他答案指出了您的錯誤innot in 您可以考慮使用標准 Python 庫中 Collections 中的 defaultdict 或 Counter 而不是 dict,以簡化您的代碼。


使用默認字典的示例

from collections import defaultdict

fat_dict = defaultdict(float) #default value will be 'float()' => 0.0
for row in data:
    date = row[1]
    fat = float(row[7])

    fat_dict[date]+=fat 

使用計數器的示例

from collections import Counter

fat_counter = Counter()
for row in data:
    date = row[1]
    fat = float(row[7])

    fat_counter[date]+=fat  

暫無
暫無

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

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