我有一个字典列表:
foo = [{'date':'01-08-2022', 'pre_val':90, 'cur_val':100},{'date':'02-08-2022', 'pre_val':70, 'cur_val':100},{'date':'01-08-2022', 'pre_val':60, 'cur_val':50}]
我想添加所有重复的一天的值
bar = [{'date':'01-08-2022', 'pre_val':150, 'cur_val':150},{'date':'02-08-2022', 'pre_val':70, 'cur_val':100}]
有人能帮我吗?
foo = [{'date':'01-08-2022', 'pre_val':90, 'cur_val':100},
{'date':'02-08-2022', 'pre_val':70, 'cur_val':100},
{'date':'01-08-2022', 'pre_val':60, 'cur_val':50}]
bar = []
for i in foo:
date, pre_val, cur_val = i.values()
isupdate = False
for d in bar:
if d["date"] == date:
d1 = {'pre_val':d["pre_val"] + pre_val,
'cur_val':d["cur_val"] + cur_val}
d.update(d1)
isupdate = True
if not isupdate:
bar.append(i)
输出:
[{'date': '01-08-2022', 'pre_val': 150, 'cur_val': 150}, {'date': '02-08-2022', 'pre_val': 70, 'cur_val': 100}]
这可以在不需要额外模块导入的情况下轻松实现,如下所示:
foo = [{'date': '01-08-2022', 'pre_val': 90, 'cur_val': 100},
{'date': '02-08-2022', 'pre_val': 70, 'cur_val': 100},
{'date': '01-08-2022', 'pre_val': 60, 'cur_val': 50}]
bar = []
for f in foo:
_date = f['date']
for b in bar:
if _date == b['date']:
for k in 'pre_val', 'cur_val':
b[k] += f[k]
break
else:
bar.append(f)
print(bar)
输出:
[{'date': '01-08-2022', 'pre_val': 150, 'cur_val': 150}, {'date': '02-08-2022', 'pre_val': 70, 'cur_val': 100}]
使用pandas分组操作可以很容易地完成这一操作:
import pandas as pd
data = [{'date':'01-08-2022', 'pre_val':90, 'cur_val':100},{'date':'02-08-2022', 'pre_val':70, 'cur_val':100},{'date':'01-08-2022', 'pre_val':60, 'cur_val':50}]
df = pd.DataFrame(data)
>> date pre_val cur_val
>> 0 01-08-2022 90 100
>> 1 02-08-2022 70 100
>> 2 01-08-2022 60 50
df2 = df.groupby("date")
.agg(
pre_val=("pre_val", sum),
cur_val=("cur_val", sum),
)
.reset_index()
>> date pre_val cur_val
>> 0 01-08-2022 150 150
>> 1 02-08-2022 70 100
df2.set_index("date").T.to_dict()
>> {'01-08-2022': {'pre_val': 150, 'cur_val': 150}, '02-08-2022': {'pre_val': 70, 'cur_val': 100}}