[英]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.