2016-09-29 8 views
0

Pythonを使用して、別の要素の値に基づいて1つの要素のすべての値を合計したい2要素辞書のリストがあります。すなわち、別の要素の値に基づいて辞書のある要素の値を合計する

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

これは、(これよりはるかに多くのエントリがあるが)フォーマットであり、各異なるelevため、私はそれに対応するすべてのarea値の合計したいと思います。私は0.1elevなど

+1

を返し

desired_output.to_dict('index') 

、あなたが何かをしようとしたのですか? – Frodon

+0

はいforループ内でループを試して、エレベーション値を反復して、エレベーションとエレベーション全体の累積を格納する新しい辞書と比較してみましょう。すべて空リストを返す – McLeodx

+0

最初のアイテムがelevの値になり、2番目のアイテムがその特定の高さの値に対応するすべてのエリアの合計となる別の辞書を作成できます。今度は元のリストを繰り返し、結果リストを変更してください。 – GadaaDhaariGeek

答えて

2

は、これは非常に簡単にパンダを使用して達成されます。サンプルコード:

次のデータフレーム与え
import pandas as pd 
df = pd.DataFrame([{'elev': 0.0, 'area': 3.52355755017894}, {'elev': 0.0, 'area': 3.5235575501288667}]) 

:ELEV列によってグループ次に

 area elev 
0 3.523558 0.0 
1 3.523558 0.0 

を、地域の合計:

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

います:

   area 
elev   
0.0 7.047115 

あなたがしたい場合は、outpバック使って便利な形式で、辞書には、このデータフレームをユタ:こんにちは

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

に同じすべての値の合計を、希望0.0elev値についてここで辞書に関連する金額を置く短いコードサンプルです。入力リストの各辞書を反復し、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} in sumdict.items()] ' – Guillaume

関連する問題