我正在学习Python,我创建了一棵trie树,在这里是trie输出:
{'a': {'b': {'c': {'_': '_'}}}, 'b': {'a': {'x': {'_': '_'}, 'r': {'_': '_', 'z': {'_': '_'}}, 'z': {'_': '_'}}}, 'h': {'e': {'l': {'l': {'o': {'_': '_'}}}}}}
我无法从 trie 中列出所有单词,显然我没有理解某些简单的东西。以下是我创建 trie 以及向 trie 添加内容以检查单词是否存在的代码。list 方法是我列出单词的努力,目前只获取每个单词的第一个字母。任何建议都将非常有用。
# Make My trie
def make_trie(*args):
"""
Make a trie by given words.
"""
trie = {}
for word in args:
if type(word) != str:
raise TypeError("Trie only works on str!")
temp_trie = trie
for letter in word:
temp_trie = temp_trie.setdefault(letter, {})
temp_trie = temp_trie.setdefault('_', '_')
return trie
# Is a word in the trie
def in_trie(trie, word):
"""
Detect if word in trie.
:param word:
:param trie:
"""
if type(word) != str:
raise TypeError("Trie only works on str!")
temp_trie = trie
for letter in word:
if letter not in temp_trie:
return False
temp_trie = temp_trie[letter]
return True
# add to the trie
def add(trie, *args):
for word in args:
if type(word) != str:
raise TypeError("Trie only works on str!")
temp_trie = trie
for letter in word:
temp_trie = temp_trie.setdefault(letter, {})
temp_trie = temp_trie.setdefault('_', '_')
return trie
# My Attempt to list out words
def list(obj, text, words):
str = ""
temp_trie = obj
for index, word in enumerate(temp_trie):
print(temp_trie[word])
if __name__ == '__main__':
trie = make_trie('hello', 'abc', 'baz', 'bar', 'barz')
# print(trie)
# get_file()
words = []
# list(trie, "", words)
print(in_trie(trie, 'bar'))
print(in_trie(trie, 'bab'))
print(in_trie(trie, 'zzz'))
add(trie, "bax")
print(in_trie(trie, 'bax'))
print(in_trie(trie, 'baz'))
print(trie)
list(trie, "", 'hello')
我希望您能够提供期望的输出——一个字典中包含Trie树中的单词,就像这样:
content = ['hello', 'abc', 'baz', 'bar', 'barz']