2017-11-30 17 views
1

私は現在、問題を抱えています。 1行に5文字の単語が1つ含まれているファイルがあります。言葉は私が単語の文字に対応する各キーとネストされた辞書を作成しようとしていますテキストファイルから深くネストされた辞書を作成する

見劣り 杭 こんにちは ヘラあり、たとえば言うことができます。たとえば、これらの言葉では、出力は次のようになります。

{'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) 

誰でもこれを行うためのより良い方法を知っていますか?私はこの問題を解決しようとしているのかどうか確信していません。

ありがとうございます!

答えて

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) 
+0

私はこのコードを実行すると、出力は単純辞書ではありません。私は辞書がありますが、各キーの間にはdefaultdict( .nested_dict at 0x1057d3d08 – Leyton

+0

はい、これらは 'defaultdict'のインスタンスです。私は答えを更新しました。戻り値には純粋なdictしか含まれていません。 –

関連する問題