类型错误:元组索引必须是整数,而不是str?

时间:2013-11-09 00:18:47

标签: python tree

我试图解析一棵树,但我收到了以下错误。类型错误:元组索引必须是整数,而不是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

2 个答案:

答案 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'}

不仅没有密钥'',所有条目都将自己包含为值。这不是你在这里的一棵树。