使用Python,我有一个双元素字典列表,我想根据另一个元素的值来汇总一个元素的所有值。即
[{'elev': 0.0, 'area': 3.52355755017894}, {'elev': 0.0, 'area': 3.5235575501288667}]
这是格式(尽管有比这更多的条目),并且对于每个不同的elev
,我希望得到与其对应的所有area
值的总和。对于elev
的{{1}}值,我想要所有值的总和,0.0
的{{1}}等相同
答案 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}