-2

我正在尝试解析一棵树,但出现以下错误。类型错误:元组索引必须是整数,而不是 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
4

2 回答 2

0

您将返回两个值,retExp,nodeMap。因此,tree 拥有一个元组 (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'}

不仅没有键'',所有条目都包含自己作为值。这不是你在这里得到的一棵树。

于 2013-11-09T00:29:24.380 回答
0

似乎名称树指向一个元组,所以不会有 tree[''] 这样的东西。树应该指向字典吗?

于 2013-11-09T00:24:59.233 回答