我试图解析一棵树,但我收到了以下错误。类型错误:元组索引必须是整数,而不是str?
def parseExpression(expression):
nodeMap = dict()
counter = 1
node = ""
retExp =""
for char in expression:
if char == '(' or char == ')' :
if (len(node) > 0):
nodeMap[str(counter)] = node;
retExp += str(counter)
counter +=1
retExp += char
node =""
elif char == ' ': continue
else :
node += char
return retExp,nodeMap
def printTree(tree, node, nodeMap):
if node not in tree:
return
print ('%s -> %s' % (nodeMap[node], ' '.join(nodeMap[child] for child in tree[node])) )
for child in tree[node]:
printTree(tree, child, nodeMap)
expression = " ( Root( SQ ( VBZ ) ( NP ( DT ) ( NN ) ) ( VP ( VB ) ( NP ( NN ) ) ) ))"
expression, nodeMap = parseExpression(expression)
tree = parseExpression(expression)
printTree(tree, tree[''][0], nodeMap)
输出:
Root -> SQ
SQ -> VBZ NP VP
NP -> DT NN
VP -> VB NP
NP -> NN
有人可以帮助调试此程序,任何帮助表示感谢谢谢。
Traceback (most recent call last):
File "C:/Python33/refd.py", line 29, in <module>
printTree(tree, tree[''][0], nodeMap)
TypeError: tuple indices must be integers, not str
答案 0 :(得分:0)
似乎名称树指向一个元组,所以不会有树['']这样的东西。 树应该指向字典吗?
答案 1 :(得分:0)
你要返回两个值,retExp,nodeMap。因此,树包含一个元组(retExp,nodeMap)。
我假设您想要从字典中打印出来的东西,这是元组中的第二个元素。所以你能做的是:
t,tree = parseExpression(expression)
printTree(tree, tree[''][0], nodeMap)
但等等,这会产生另一个错误,因为该字典中没有与keye'存储的内容。所以我决定打印一本字典,这就是我所看到的:
{'10': '10', '1': '1', '3': '3', '2': '2', '5': '5', '4': '4', '7': '7', '6': '6', '9': '9', '8': '8'}
不仅没有密钥'',所有条目都将自己包含为值。这不是你在这里的一棵树。