Python:从文本文件读取树状数据并存储在字典中
我有一个文本文件,里面包含树状的数据,这些数据用空格分隔,结构如下:
‘分支数量’ ‘节点名称’ ... 0(0表示没有更多的分支)
例如:
1 A 3 B 2 C 0
D 0
E 1 F 0
G 2 H 0
I 0
对应的字典'tree'应该是这样的:
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 个回答
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': {}}}}
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()))