簡體   English   中英

在space中將空格分隔的樹轉換為有用的dict

[英]Convert a space-delimited tree to useful dict in python

我有一個項目的輸出(列表),如下所示:

Root
  Branch1
    LeafA
    LeafB
  Branch2
    LeafC
      LeafZ
    LeafD

它們都是兩個空格分隔的。 我希望在沒有前導空格的情況下構建此列表的邏輯表示,並保留父子關系。

最終可能的結果:

aDict = {
    'Root': null,
    'Branch1': 'Root',
    'LeafA': 'Branch1',
... so on and so forth
}

最后,我想遍歷字典並檢索Key和parent,以及另一個基於Key的dict中的另一個值。

嘗試這個:

tree = """Root
  Branch1
    LeafA
    LeafB
  Branch2
    LeafC
      LeafZ
    LeafD"""

aDict = {}
iDict = {}
for line in tree.split("\n"):
    key = line.lstrip(" ")
    indent = (len(line) - len(key)) / 2
    if indent == 0:
        aDict[key] = None
    else:
        aDict[key] = iDict[indent - 1]
    iDict[indent] = key

print aDict
# {'LeafD': 'Branch2', 'LeafA': 'Branch1', 'Branch2': 'Root', 'LeafC': 'Branch2', 'LeafB': 'Branch1', 'Branch1': 'Root', 'Root': None, 'LeafZ': 'LeafC'}

我想這解決了這個問題:

#!/usr/bin/env python

def f(txt):
    stack = []
    ret = {}
    for line in txt.split('\n'):
        a = line.split('  ')
        level = len(a) - 1
        key = a[-1]
        stack = stack[:level]
        ret[key] = stack[-1] if len(stack) > 0 else None
        stack.append(key)
    return ret

print f("""Root
  Branch1
    LeafA
    LeafB
  Branch2
    LeafC
      LeafZ
    LeafD""")

print f("""Root1
  Branch1
    LeafA
      LeftZ
  Branch2
    LeftB
Root2
  Branch3""")

輸出:

{'LeafD': 'Branch2', 'LeafA': 'Branch1', 'Branch2': 'Root', 'LeafC': 'Branch2', 'LeafB': 'Branch1', 'Branch1': 'Root', 'Root': None, 'LeafZ': 'LeafC'}
{'LeafA': 'Branch1', 'Branch2': 'Root1', 'Branch1': 'Root1', 'LeftZ': 'LeafA', 'LeftB': 'Branch2', 'Branch3': 'Root2', 'Root1': None, 'Root2': None}

暫無
暫無

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

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