修改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

  1. 先修改原来的列表
# 
将 
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
        }
    ]
"""

posted @ 2021-06-30 13:02  死里学  阅读(181)  评论(0)    收藏  举报