如何生成指定格式的列表?Python字典转列表格式调整求助
解决字典列表结构化转换问题
修正后的代码
payment_no = [] for i in df2: current_payment_num = df2[i]['Payment_Number'] # 构建Line列表,移除每个发票字典中的Payment_Number键 line_list = [] for k in df3: if df3[k]['Payment_Number'] == current_payment_num: # 复制字典并删除不需要的键 invoice_dict = df3[k].copy() del invoice_dict['Payment_Number'] line_list.append(invoice_dict) # 构建符合要求的结构化字典并加入列表 payment_no.append({ 'Payment_Number': current_payment_num, 'Line': line_list }) print(payment_no)
关键修改点
- 替换扁平追加为结构化字典:原代码每次循环向
payment_no追加字符串和列表,改为直接构建包含Payment_Number和Line的字典,确保每个元素都是符合要求的结构化对象。 - 移除发票字典中的冗余键:通过字典复制并删除
Payment_Number键,让Line列表中的发票信息只保留需要的字段。 - 简化变量引用:提取当前支付编号到变量
current_payment_num,避免重复调用df2[i]['Payment_Number'],提升代码可读性。
优化建议(可选)
如果df3数据量较大,嵌套循环效率较低,可以先通过字典对df3按Payment_Number分组,减少循环次数:
# 先对df3按Payment_Number分组 from collections import defaultdict payment_invoice_map = defaultdict(list) for k in df3: invoice_dict = df3[k].copy() del invoice_dict['Payment_Number'] payment_invoice_map[df3[k]['Payment_Number']].append(invoice_dict) # 再生成结果列表 payment_no = [] for i in df2: payment_num = df2[i]['Payment_Number'] payment_no.append({ 'Payment_Number': payment_num, 'Line': payment_invoice_map.get(payment_num, []) })
内容的提问来源于stack exchange,提问作者hazeeb hashim siddique
相关产品推荐
相关产品推荐

