我目前正在努力解决一个问题。我有一个文件,每行包含一个5个字母的单词。让我们说例如单词是 你好 海拉 相形见绌 桩
我正在尝试创建一个嵌套字典,每个键对应于单词中的字母。例如,使用这些单词,输出将是。
{'H':{'e':{'l':{'l':{'o':'Hello','a':'Hella'}}}}, 'P':{'a':{'l':{'e':
{'s':'Pales'}}}, 'i':{'l':{'e':{'s':'Piles}}}}}
我尝试了一些几乎可以工作的代码,但是没有产生正确的结果。
T={}
for w in wordsFile:
T[list(w)[0]]={list(w)[1]:{list(w)[2]:{list(w)[3]:{list(w)[4]:w}}}}
return(T)
有谁知道更好的方法来做到这一点。我只是不太确定要解决这个问题。
提前致谢!
答案 0 :(得分:1)
以下代码应该完成它的工作:
def add_to_dict(dictionary, word):
current_dict = dictionary
for i, letter in enumerate(word):
if i == len(word) - 1:
current_dict[letter] = word
else:
if not letter in current_dict:
current_dict[letter] = {}
current_dict = current_dict[letter]
dictionary = {}
add_to_dict(dictionary, "Hello")
add_to_dict(dictionary, "Hella")
或者您可以使用defaultdict
:
from collections import defaultdict
def nested_dict():
return defaultdict(nested_dict)
def add_to_dict(dictionary, word):
current_dict = dictionary
for i, letter in enumerate(word):
if i == len(word) - 1:
current_dict[letter] = word
else:
current_dict = current_dict[letter]
def to_dict(dictionary):
dictionary = dict(dictionary)
for key, value in dictionary.items():
if isinstance(value, defaultdict):
dictionary[key] = to_dict(value)
return dictionary
dictionary = defaultdict(nested_dict)
add_to_dict(dictionary, "Hello")
add_to_dict(dictionary, "Hella")
dictionary = to_dict(dictionary)