[英]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}
其他答案指出了您的錯誤in
與not 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.