这是示例XML。

<?xml version="1.0" encoding="UTF-8"?>
<Test plan_name="test">
  <Big bro="S7" sys="lolipop">
      <Work name="first"></Work>
      <Work name="second"></Work>
  </Big>
  <Big bro="S6" sys="kitkat">
      <Work name="trird"></Work>
      <Work name="fourth"></Work>
  </Big>
</Test>


我的目标是使用每个工作名称创建字典并将其保存在列表中。

这是我的示例代码:

import xml.etree.ElementTree as ET

tree = ET.parse(line[0].rstrip()+'/stack.xml')
root = tree.getroot()

total=[]

for child in root.findall('Big'):
  test=child.attrib
  for children in child:
    test.update(children.attrib)
    total.append(test)
print total


预期产量:


  [{'bro':'S7','sys':'lolipop','name':'first'},{'bro':'S7','sys':'lolipop','name':'second '},{'bro':'S6','sys':'kitkat','name':'third'},{'bro':'S6','sys':'kitkat','name': '第四'}]


但是我的输出看起来像这样:


  [{'bro':'S7','sys':'lolipop','name':'second'}},{'bro':'S7','sys':'lolipop','name':'second '},{'bro':'S6','sys':'kitkat','name':'fourth'},{'bro':'S6','sys':'kitkat','name': '第四'}]


请帮帮我。
谢谢

最佳答案

您就地修改test字典,这也将导致总共修改以前插入的引用。
它应该通过在更新之前创建一个副本来工作:

...
for child in root.findall('Big'):
  test=child.attrib
  for children in child:
    testCopy = dict(test)
    testCopy.update(children.attrib)
    total.append(testCopy)
print(total)
...

10-06 05:47