递归迭代嵌套的python字典

时间:2016-10-11 19:36:42

标签: python xml dictionary recursion lxml

我有这样的嵌套python字典。

d = {}
d[a] = b
d[c] = {1:2, 2:3}

我试图以递归方式将嵌套字典转换为xml格式,因为内部可以有更多嵌套字典,例如d[e] = {1:{2:3}, 3:4}。我想要的XML格式是这样的

<root>
  <a>b</a>
  <c>
    <1>2</1> 
    <2>3</3>
  </c> 
</root>

我到目前为止这个python代码使用lxml库来处理嵌套的xml。但它并没有给我所需的输出。

def encode(node, Dict):  
  if len(Dict) == 0:  
    return node 
  for kee, val in Dict.items():  
    subNode = etree.SubElement(node, kee) 
    del msgDict[kee]  
    if not isinstance(val, dict): 
      subNode.text = str(val) 
    else: 
      return encode(subNode, val)

感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

您调用编码的方式看起来不正确。也许这有帮助。为简单起见,我只需将内容附加到列表(称为l)。相反,您应该执行etree.SubElement(...)

def encode(D, l=[]):
    for k, v in D.items():
        if isinstance(v, dict):
            l2 = [k]
            encode(v, l2)
            l.append(l2)
        else:
            l.append([k, v])

答案 1 :(得分:0)

我在我的代码中发现了错误,这是我没有将递归调用返回到原始循环。进入嵌套元素后,它“返回”并且不会返回到原始循环。保存在变量return encode(subNode, val)中而不是element = encode(subNode, val)可以解决问题。