基于另一个元素的值对字典的一个元素的值求和

时间:2016-09-29 07:33:22

标签: python dictionary

使用Python,我有一个双元素字典列表,我想根据另一个元素的值来汇总一个元素的所有值。即

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

这是格式(尽管有比这更多的条目),并且对于每个不同的elev,我希望得到与其对应的所有area值的总和。对于elev的{​​{1}}值,我想要所有值的总和,0.0的{​​{1}}等相同

4 个答案:

答案 0 :(得分:2)

使用熊猫很容易实现这一点。示例代码:

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

提供以下数据帧:

       area  elev
0  3.523558   0.0
1  3.523558   0.0

然后按高程列分组并对区域进行求和:

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

给出:

              area
elev          
0.0   7.047115

如果需要,可以使用以下方法将此数据帧以有用的格式输出回字典:

desired_output.to_dict('index')

返回

{0.0: {'area': 7.0471151003078063}}

答案 1 :(得分: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)

答案 2 :(得分:0)

这是一个简短的代码示例,它将相关的总和放入字典中。它只是迭代输入列表中的每个字典,将area值添加到相应的elev键。

from collections import defaultdict

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

答案 3 :(得分: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}