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