【发布时间】:2018-11-23 17:14:22
【问题描述】:
我正在尝试实现一个函数,该函数读取包含在 Trie 树中的所有单词,将它们与它们的键一起存储在一个列表中,并将它们写入一个 .csv 文件中。函数“insertTrie”工作正常;但是,当我将“root”作为参数传递给函数“getAllTrie”时,由于某种原因,当我在函数中打印它(作为测试)然后“AttributeError”时,它会向节点添加一个字符串(“q”) : 'str' 对象没有属性 'char'" 发生。当我在函数外打印“root”时,字符串不存在。这是什么原因造成的?我花了很长时间试图找到答案。
import csv
class Node():
def __init__(self):
self.sons = {}
self.char = None
self.value = None
def insertTrie(currentNode, word, size):
if(size == len(word)):
if(currentNode.value is None):
currentNode.value = 1
else:
currentNode.value += 1
return currentNode
currentChar = word[size]
if(currentChar not in currentNode.sons):
currentNode.sons[currentChar] = Node()
currentNode.sons[currentChar].char = currentChar
currentNode.sons[currentChar] = insertTrie(currentNode.sons[ccurrentChar], word, size+1)
return currentNode
def getAllTrie(currentNode, findWord):
if(currentNode is not None):
#print(currentNode) -> print root inside function, 'q' appears
if(currentNode.char is not None):
if(findWord is None):
findWord = []
findWord.append(currentNode.char)
if(currentNode.value is not None):
wordAndKey = [''.join(findWord), currentNode.value]
writeCSVfile('exit.csv', wordAndKey) # writes word and key in csv file
findWord = None
for son in currentNode.sons:
getAllTrie(son, findWord)
root = Node()
testStr = 'querida queremos ate quero quero'
listStr = testStr.split( )
for word in listStr:
root = insertTrie(root, word, 0)
#print(root) -> print root outside of function, 'q' doesn't appear
getAllTrie(root, None)
当我在函数“getAllTrie”之外打印“root”时(在代码的注释中),它会打印:
<__main__.Node object at 0x03323610>
但是当我在函数中打印它(也在注释中)时,它会打印:
<__main__.Node object at 0x03323610>
q
我不知道为什么会有那个“q”。这是根的一个儿子中包含的字符,但是当我在函数中打印根本身时它会显示出来,我不知道为什么。
【问题讨论】:
标签: python python-3.x tree trie