修改json格式数据返回给前端, 添加属性[合并相同的属性并统计数量]
需求: 前端要我们统计编码一样的数据的数量, 还有计算总的车次和数量
我们需要对下面的数组进行操作
[
{'product_no': 'C-FM-B568-01', 'trains': 1},
{'product_no': 'C-FM-B568-02', 'trains': 1},
{'product_no': 'C-1M-S231-01', 'trains': 2},
{'product_no': 'C-1M-S231-01', 'trains': 1}
]
====转换成======>
[
{'product_no': 'C-FM-B568-01', 'trains': 1, 'num': 1},
{'product_no': 'C-FM-B568-02', 'trains': 1, 'num': 1},
{'product_no': 'C-1M-S231-01', 'trains': 3, 'num': 2}
]
方法一
a = [
{'product_no': 'C-FM-B568-01', 'trains': 1},
{'product_no': 'C-FM-B568-02', 'trains': 1},
{'product_no': 'C-1M-S231-01', 'trains': 2},
{'product_no': 'C-1M-S231-01', 'trains': 1}
]
c = {i['product_no']: {} for i in a}
for i in a:
if not c[i['product_no']]:
i.update({"num": 1})
c[i['product_no']].update(i)
else:
c[i['product_no']]['num'] += 1
c[i['product_no']]['trains'] += i['trains']
print(c.values())
方式二 使用 pandas
- 先修改原来的列表
#
将
a = [
{'product_no': 'C-FM-B568-01', 'trains': 1},
{'product_no': 'C-FM-B568-02', 'trains': 1},
{'product_no': 'C-1M-S231-01', 'trains': 2},
{'product_no': 'C-1M-S231-01', 'trains': 1}
]
改为
lst = [
{'product_no': 'C-FM-B568-01', 'trains': 1, 'num': 1},
{'product_no': 'C-FM-B568-02', 'trains': 1, 'num': 1},
{'product_no': 'C-1M-S231-01', 'trains': 2, 'num': 1},
{'product_no': 'C-1M-S231-01', 'trains': 1, 'num': 1}
]
lst = []
for i a:
lst.append({'product_no': i['product_no'], 'trains': (i['end_trains'] - i['begin_trains']), 'num': 1})
print(lst)
2. 直接使用pandas
import json
import pandas as pd
data = json.loads(pd.DataFrame(lst).groupby('product_no').sum().reset_index().to_json(orient='records'))
print(data)
"""
[
{
"product_no": "C-1M-S231-01",
"trains": 3,
"num": 2,
"actual_weight": 2000.0
},
{
"product_no": "C-FM-B568-01",
"trains": 1,
"num": 1,
"actual_weight": 1000.0
},
{
"product_no": "C-FM-B568-02",
"trains": 1,
"num": 1,
"actual_weight": 1000.0
}
]
"""
本文来自博客园,作者:长情不羁的五年,转载请注明原文链接:https://www.cnblogs.com/grlend/p/14953996.html

浙公网安备 33010602011771号