2016-09-29 69 views
0

使用Python,我有一個兩元素字典的列表,我想根據另一個元素的值來總和一個元素的所有值。即。基於另一個元素的值來總結字典的一個元素的值

[{'elev': 0.0, 'area': 3.52355755017894}, {'elev': 0.0, 'area': 3.5235575501288667}] 

這是格式(雖然還有比這更項),併爲每個不同的elev我想有一個與之對應的所有area值的總和。對於0.0elev價值我想所有值的總和,同樣爲0.1elev

+1

你好,你嘗試的東西嗎? – Frodon

+0

是的我在for循環中嘗試了一個for循環,遍歷高程值並將它們與一個新的字典進行比較,該字典將只存儲該高程的總面積的高程和累積量。但它不起作用所有,只是返回一個空的列表 – McLeodx

+0

您可以製作另一個字典,其中第一個項目是高程值,第二個字典是對應於該特定高程值的所有區域的總和。現在只需遍歷你的原始列表並修改你的結果列表。 – GadaaDhaariGeek

回答

2

這是用大熊貓很容易實現。示例代碼:

import pandas as pd 
df = pd.DataFrame([{'elev': 0.0, 'area': 3.52355755017894}, {'elev': 0.0, 'area': 3.5235575501288667}]) 

它提供了以下數據框:這給

desired_output = df.groupby('elev').sum() 

   area 
elev   
0.0 7.047115 
由高程列

 area elev 
0 3.523558 0.0 
1 3.523558 0.0 

然後組,總結該地區的

如果你想要,你可以然後outp UT斯達康這個數據幀回字典使用一個有用的格式:

desired_output.to_dict('index') 

返回

{0.0: {'area': 7.0471151003078063}} 
0

下面是把相關的資金投入字典的短代碼示例。它只是遍歷輸入列表中的每個字典,將area值添加到適當的elev密鑰。

from collections import defaultdict 

summed_dict = defaultdict(float) 
for tup in input_list: 
    summed_dict[tup['elev']] += tup['area'] 
+0

我的不好,謝謝! – Meerness

0

你可以試試:

>>> l = [{'elev': 0.0, 'area': 3.52355755017894}, {'elev': 0.0, 'area': 3.5235575501288667}] 
>>> added_dict = {} 
>>> for i in l: 
     if i['elev'] in added_dict: 
      added_dict[i['elev']] += i['area'] 
     else: 
      added_dict[i['elev']] = i['area'] 


>>> added_dict 
{0.0: 7.0471151003078063} 
1

使用defaultdict,你不需要到if/else聲明:

from collections import defaultdict 

mylist = [{'elev': 0.0, 'area': 3.52355755017894}, {'elev': 0.0, 'area': 3.5235575501288667}] 

sumdict = defaultdict(float) 

for d in mylist: 
    sumdict[d['elev']] += d.get('area', 0.0) 

print dict(sumdict) 
+0

我該如何使用這種方法來創建字典{'elev':x,'total':y}? – McLeodx

+0

@McLeodx我更新了我的答案,以防鑰匙'area'缺失 – Frodon

+0

@McLeodx:只需在最後加上這一行:'mytotalslist = [{'elev':key,'total':value} for key,value在sumdict.items()]'中 – Guillaume

相關問題