如何用相同的键值对dict元素求和

bttbmeg0  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(216)

有一个词典列表:

list_dict = [
    {
        "id_sistema_productivo": 48,
        "area": 327
    },
    {
        "id_sistema_productivo": 51,
        "area": 205.65
    },
    {
        "id_sistema_productivo": 48,
        "area": 327
    },
    {
        "id_sistema_productivo": 51,
        "area": 209.13
    }
]

我不认为我做得很对(被困了几个小时),但预期的React应该是这样的:

new_list_dict = [
    {
        "id_sistema_productivo": 48,
        "area": 654
    },
    {
        "id_sistema_productivo": 51,
        "area": 414.78
    },
]
t9eec4r0

t9eec4r01#

所有字典都有相同的键,您可以首先使用默认dict对每个字典求和,然后根据结果重建一个列表:

from collections import defaultdict

result = defaultdict(int)
for d in list_dict:
  result[d["id_sistema_productivo"]] += d["area"]

result = [{"id_sistema_productivo": id, "area": area} for id, area in result.items()]

如果字典键总是相同的,考虑将其封装在类中,这样会更清楚(例如使用 dataclass 非常方便):

from dataclasses import dataclass

@dataclass
class Element:
    id_sistema_productivo: int
    area: int

然后,您可以更轻松地表达您想要的内容:

list_dict = [
  Element(48, 327),
  Element(51, 205.65),
  Element(48, 327),
  Element(51, 209.13)
]

result = defaultdict(int)
for element in list_dict:
    result[element.id_sistema_productivo] += element.area
result = [Element(i, a) for i, a in result.items()]

print(result)
5tmbdcev

5tmbdcev2#

你可以用Pandas来做:

import pandas as pd
list_dict = [
  {
    "id_sistema_productivo": 48,
    "area": 327
  },
  {
    "id_sistema_productivo": 51,
    "area": 205.65
  },
  {
    "id_sistema_productivo": 48,
    "area": 327
  },
  {
    "id_sistema_productivo": 51,
    "area": 209.13
  }
]
df=pd.DataFrame(list_dict)
data=df.groupby(['id_sistema_productivo']).sum()
print(data)
9bfwbjaz

9bfwbjaz3#

假设投入的可预测性与路易斯相同

list_of_dicts = [                                                                                                                                                                                                  
  {
    "id_sistema_productivo": 48, 
    "area": 327 
  },  
  {
    "id_sistema_productivo": 51, 
    "area": 205.65
  },  
  {
    "id_sistema_productivo": 48, 
    "area": 327 
  },  
  {
    "id_sistema_productivo": 51, 
    "area": 209.13
  }
]

from collections import Counter
c = Counter()
[c.update({d["id_sistema_productivo"]: d["area"]}) for d in list_of_dicts]
result = [{"id_sistema_produtivo":k, "area":v} for k,v in c.items()]
print(result)

给出输出

[{'id_sistema_produtivo': 48, 'area': 654}, {'id_sistema_produtivo': 51, 'area': 414.78}]

相关问题