簡體   English   中英

如何通過相同的鍵值對dict元素求和

[英]How sum dict element by same key value

有一個字典列表:

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
    }
]

我認為我做得不太對(被卡了幾個小時),但預期的響應應該是這樣的:

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

您所有的字典都有相同的鍵,您可以首先使用默認字典對它們中的每一個求和,然后從結果中重建一個列表:

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)

你可以用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)

假設輸入的可預測性與 Louis 相同

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)

給output

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM