簡體   English   中英

遞歸地迭代嵌套的python字典

[英]recursively iterate nested python dictionary

我已經像這樣嵌套了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)

任何幫助表示贊賞。 謝謝。

您回憶編碼的方式看起來不正確。 也許這會有所幫助。 為了簡單起見,我只將內容添加到列表(稱為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])

我在代碼中找到了錯誤,這是我沒有將遞歸調用返回到原始循環。 進入嵌套元素后,它會“返回”,並且不會回到原始循環。 代替return encode(subNode, val) ,保存一個變量element = encode(subNode, val)可以解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM