如何通过公共值link一个数组到另一个数组

How to link an array to another array through a common value

我正在使用 lxml 通过 Python 中的纯文本数据创建 XML 文档,但我遇到了问题 link 将一个数组与另一个数组进行 link共同价值。一个数组称为 Promotion,另一个数组称为 TotalAmount。

XML中的愿望结构如下:

<Header>
   <Promotion>
       <PromotionData>
           Promotion_1 data
       </PromotionData>
       <TotalAmount>
           Promotion_1 Amount
       </TotalAmount>
   </Promotion>
   <Promotion>
       <PromotionData>
           Promotion_2 data
       </PromotionData>
       <TotalAmount>
           Promotion_2 Amount
       </TotalAmount>
   </Promotion>
</Header>

我正在转换的数据分布如下:

4baz                    PROMOTION_1         foo
4baz                    PROMOTION_1         foo
4baz                    PROMOTION_1         foo
4baz                    PROMOTION_2         foo
4baz                    PROMOTION_2         foo
4baz                    PROMOTION_2         foo

每行开头的数字4是这种“寄存器类型”的ID,这是我需要放入<PromotionData>标签中的数据。

标签 <TotalAmount> 的数据如下所示:

5PROMOTION_1            bar                 foo
5PROMOTION_2            bar                 foo

每行开头的数字5是该“寄存器类型”的ID。

我正在读取这些数据并将它们分成不同的数组...所以我有 array_1 和 array_2.

link 的最佳形式是什么,或者使用公共值以每个 PROMOTION_1PROMOTION_2 连接到其相应数据并获得输出的方式循环遍历这些数组喜欢在欲望结构中吗?

from lxml import etree

data1 = [('4baz', 'PROMOTION_1', 1),
         ('4baz', 'PROMOTION_1', 2),
         ('4baz', 'PROMOTION_1', 3),
         ('4baz', 'PROMOTION_2', 4),
         ('4baz', 'PROMOTION_2', 5),
         ('4baz', 'PROMOTION_2', 6)
         ]
data2 = [('5PROMOTION_1', 1, 2), ('5PROMOTION_2', 3, 4)]


root = etree.Element('Header')
for d1 in data1:
    for d2 in data2:
        if d1[1] in d2[0]:
            promotion = etree.Element('Promotion')
            root.append(promotion)
            data = etree.Element('PromotionData')
            data.text = f'{d1[1]} {d1[2]}'
            promotion.append(data)
            data = etree.Element('TotalAmount')
            data.text = f'{d2[1]} {d2[2]}'
            promotion.append(data)

out = etree.tostring(root, pretty_print=True)
print(out.decode('utf8'))

输出

<Header>
  <Promotion>
    <PromotionData>PROMOTION_1 1</PromotionData>
    <TotalAmount>1 2</TotalAmount>
  </Promotion>
  <Promotion>
    <PromotionData>PROMOTION_1 2</PromotionData>
    <TotalAmount>1 2</TotalAmount>
  </Promotion>
  <Promotion>
    <PromotionData>PROMOTION_1 3</PromotionData>
    <TotalAmount>1 2</TotalAmount>
  </Promotion>
  <Promotion>
    <PromotionData>PROMOTION_2 4</PromotionData>
    <TotalAmount>3 4</TotalAmount>
  </Promotion>
  <Promotion>
    <PromotionData>PROMOTION_2 5</PromotionData>
    <TotalAmount>3 4</TotalAmount>
  </Promotion>
  <Promotion>
    <PromotionData>PROMOTION_2 6</PromotionData>
    <TotalAmount>3 4</TotalAmount>
  </Promotion>
</Header>