Python嵌套循环匹配列表对应元素生成XML文件问题
解决Python生成对应索引匹配的合作伙伴XML文件问题
问题说明
需要生成包含约1000行合作伙伴数据的XML文件,要求将list_a、list_b、list_c、list_d的同索引元素一一对应,每个<Partners>节点封装一组对应索引的元素,但当前嵌套循环的写法会生成大量重复组合,无法得到预期结构。
原数据与错误代码
原始列表数据
list_a = ['aaa', 'bbb', 'ccc'] list_b = ['ddd', 'eee', 'fff'] list_c = ['ggg', 'hhh', 'iii'] list_d = ['jjj', 'kkk', 'lll']
错误的嵌套循环代码
for item_a in list_a: print('<Partners>') print(' <ExternalCode>', end='') print(item_a, end='') print('</ExternalCode>') for item_b in list_b: print(' <ShortName>', end='') print(item_b, end='') print('</ShortName>') for item_c in list_c: print(' <Name>', end='') print(item_c, end='') print('</Name>') for item_d in list_d: print(' <PartnerGroupCode>', end='') print(item_d, end='') print('</PartnerGroupCode>') print('</Partners>')
正确解决方案
问题出在嵌套循环会遍历所有列表的元素组合,而我们需要的是按索引一一对应。可以用zip()函数把四个列表按索引打包,然后遍历每一组打包后的元素:
list_a = ['aaa', 'bbb', 'ccc'] list_b = ['ddd', 'eee', 'fff'] list_c = ['ggg', 'hhh', 'iii'] list_d = ['jjj', 'kkk', 'lll'] # 用zip打包同索引元素,遍历每一组 for a, b, c, d in zip(list_a, list_b, list_c, list_d): print('<Partners>') print(f' <ExternalCode>{a}</ExternalCode>') print(f' <ShortName>{b}</ShortName>') print(f' <Name>{c}</Name>') print(f' <PartnerGroupCode>{d}</PartnerGroupCode>') print('</Partners>')
生成的XML结果
运行上述代码会生成符合预期的结构:
<Partners> <ExternalCode>aaa</ExternalCode> <ShortName>ddd</ShortName> <Name>ggg</Name> <PartnerGroupCode>jjj</PartnerGroupCode> </Partners> <Partners> <ExternalCode>bbb</ExternalCode> <ShortName>eee</ShortName> <Name>hhh</Name> <PartnerGroupCode>kkk</PartnerGroupCode> </Partners> <Partners> <ExternalCode>ccc</ExternalCode> <ShortName>fff</ShortName> <Name>iii</Name> <PartnerGroupCode>lll</PartnerGroupCode> </Partners>
处理1000行数据的注意事项
如果要生成1000行数据,确保四个列表的长度一致,zip()会以最短的列表长度为准。若列表长度可能不一致,可使用itertools.zip_longest()来处理,不过需要提前确定缺省值的填充逻辑(比如空字符串)。
内容的提问来源于stack exchange,提问作者user22371292
相关产品推荐
相关产品推荐

