Python 求助一个列表里有很多字典,怎么合并相同键生成一个新的列表?

Python 求助一个列表里有很多字典,怎么合并相同键生成一个新的列表?

data = [

{'售后编号': '123', '订单编号': '1234', '商家编码': '商品A', '退款数量': 1, '卖家备注': '', '物流单号': '789789',

'超时时间': '', '退款类型': '', '退款金额': ''},

{'售后编号': '212', '订单编号': '1234', '商家编码': '商品B', '退款数量': 1, '卖家备注': '', '物流单号': '789789',

'超时时间': '', '退款类型': '', '退款金额': ''},

{'售后编号': '321', '订单编号': '1234', '商家编码': '商品C', '退款数量': 1, '卖家备注': '', '物流单号': '987987',

'超时时间': '', '退款类型': '', '退款金额': ''},

{'售后编号': '578', '订单编号': '4321', '商家编码': '商品D', '退款数量': 1, '卖家备注': '', '物流单号': '897897',

'超时时间': '', '退款类型': '', '退款金额': ''}

]

result = [

{'订单编号': '1234', '卖家备注': '',

'789789': [{'售后编号': '123', '商家编码': '商品A', '超时时间': '', '退款类型': '', '退款金额': ''},

{'售后编号': '212', '商家编码': '商品B', '超时时间': '', '退款类型': '', '退款金额': ''}],

'987987': [{'售后编号': '321', '商家编码': '商品C', '超时时间': '', '退款类型': '', '退款金额': ''}]

},

{'订单编号': '4321', '卖家备注': '',

'897897': [{'售后编号': '578', '商家编码': '商品D', '超时时间': '', '退款类型': '', '退款金额': ''}]

}

]

如举例代码所示,data 是原始数据, result 是我想要的数据结构

大致就是一个订单里面 只有一个订单编号,一个备注内容,但是可以有很多商品,每个商品有对应的属性,效果就是把订单编号相同的数据合并,然后以物流单号为键去查找,如果物流单号相同则合并


回答:

python">

def group_by_order(data: list) -> dict:

orders_info = dict()

for d in data:

order_id = d['订单编号']

if order_id not in orders_info:

orders_info[order_id] = list()

orders_info[order_id].append(d)

return orders_info

def gen_result(orders_info: dict) -> list:

result = []

for oi in orders_info:

os = orders_info[oi]

r = dict()

for i, o in enumerate(os):

if i == 0:

r['订单编号'] = o['订单编号']

sno = o['物流单号']

if sno not in r:

r[sno] = list()

r[sno].append({'售后编号': o['售后编号']})

result.append(r)

return result

def main():

print(gen_result(group_by_order(data)))

if __name__ == '__main__':

main()

以上是 Python 求助一个列表里有很多字典,怎么合并相同键生成一个新的列表? 的全部内容, 来源链接: utcz.com/p/938701.html

回到顶部