Python:从文本文件中读取树状数据并存储在字典中

时间:2013-01-20 08:59:13

标签: python recursion tree

我有一个文本文件,其中包含由具有以下结构的空格分隔的数据树: '分支数''节点名称'... 0(0表示没有其他分支) 例如:

1 A 3 B 2 C 0 
        D 0
    E 1 F 0
    G 2 H 0
      I 0

相应的词典“树”应该是:

tree = {'A': {'B': {'C': {},
                    'D': {}},
              'E': {'F': {}},
              'G': {'H': {},
                    'I': {}}}}

我认为递归方式是正确的方法,但我无法使它工作。到目前为止我有以下功能:

def constructNodes(branch):

    global nodes_temp

    if not branch:
        branch = deque(file.readline().strip().split())
    node1 = branch.popleft()
    nodes_temp.add(node1)
    nbBranches = int(branch.popleft())
    for i in xrange(nbBranches):
        constructNodes(branch)
    return nodes_temp

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您不需要deque来遍历序列,您可以使用常规的python迭代。这可以使事情更简洁。

data = """
1 A 3 B 2 C 0 
        D 0
    E 1 F 0
    G 2 H 0
      I 0"""

def construct_nodes(data):
    return dict((next(data), construct_nodes(data))
                for _ in xrange(int(next(data))))

print construct_nodes(iter(data.split()))

答案 1 :(得分:2)

我认为这就是你想要的:

from collections import deque

data = deque('''\
1 A 3 B 2 C 0 
        D 0
    E 1 F 0
    G 2 H 0
      I 0'''.split())

def constructNodes():
    D = {}
    count = int(data.popleft())
    for _ in range(count):
        node = data.popleft()
        D[node] = constructNodes()
    return D
tree = constructNodes()
print(tree)

输出:

{'A': {'B': {'C': {}, 'D': {}}, 'G': {'H': {}, 'I': {}}, 'E': {'F': {}}}}

使用一些格式:

{'A': {'B': {'C': {},
             'D': {}},
       'G': {'H': {},
             'I': {}},
       'E': {'F': {}}}}