![](/img/trans.png)
[英]Making arrays of columns (or rows) of a (space-delimited) textfile in Python
[英]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.