有一个字典列表:
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
},
]
所有字典都有相同的关键字,您可以首先使用默认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)
您可以使用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)
给出输出
[{'id_sistema_produtivo': 48, 'area': 654}, {'id_sistema_produtivo': 51, 'area': 414.78}]