如何通过公共值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_1
或 PROMOTION_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>
我正在使用 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_1
或 PROMOTION_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>