Это начальная программа для реализации дерева префиксов для вопроса.Позже я использовал функцию dict.copy () для работы с динамическим поведением словаря, но не смог получить желаемый результат.
end='end'
def make_trie(word,root):
current_dict=root
for letter in word:
current_dict=current_dict.setdefault(letter,{})
current_dict[end]=end
return root
s=[]
n=int(input())
t=[]
for _ in range(n):
s.append(input())
if _==0:
d=make_trie(s[-1],{})
else:
d=make_trie(s[-1],d)
t.append(d.copy())
print(t)
Список, который я получаю для ввода:
4
abcd
abce
abcdex
abcde
is:
[{'a': {'b': {'c': {'d': {'end': 'end', 'e': {'x': {'end': 'end'}, 'end': 'end'}}, 'e': {'end': 'end'}}}}}, {'a': {'b': {'c': {'d': {'end': 'end', 'e': {'x': {'end': 'end'}, 'end': 'end'}}, 'e': {'end': 'end'}}}}}, {'a': {'b': {'c': {'d': {'end': 'end', 'e': {'x': {'end': 'end'}, 'end': 'end'}}, 'e': {'end': 'end'}}}}}, {'a': {'b': {'c': {'d': {'end': 'end', 'e': {'x': {'end': 'end'}, 'end': 'end'}}, 'e': {'end': 'end'}}}}}]
Это в 4 раза больше окончательного словаря.
Пожалуйста, предложите какой-нибудь способ решить эту проблему.