2016-05-16 2 views
0

人、私はそのような質問があります。内部に他の辞書/リストなどが入っている辞書/リストがあるとします。辞書やリストでもっと深く見つけてください

例:

dict = { 
'Domains':{ 
'Web':['JavaScript','PHP','Python'], 
'Mobile':{'Android':'Java','iOS':['Swift','Objective-C'],'Windows Phone':'C#'}, 
'Desktop':['C#','Java','Python']} 
} 

と私はこの辞書に 'iOSの' リストを見つけたいです。この要素が存在する場合、要素の値を表示する関数を呼び出す方法があります。 例:

print(function('iOS')) 

['Swift','Objective-C'] 
+0

最も簡単な方法は、再帰関数を作成することです。 – Selcuk

答えて

1

まず、ヘルパー関数のすべてのdictsを見つけるために:

def all_dicts(a_dict): 
    yield a_dict 
    for key in a_dict: 
     if isinstance(a_dict[key], dict): 
      yield from all_dicts(a_dict[key]) 

そして今、ルックアップ機能:

def lookup(a_dict, key): 
    for d in all_dicts(a_dict): 
     if key in d: 
      return d[key] 

アクションでそれを見るために:

>>> d = {'Domains': {'Web': ['JavaScript', 'PHP', 'Python'], 'Desktop': ['C#', 'Java', 'Python'], 'Mobile': {'Android': 'Java', 'Windows Phone': 'C#', 'iOS': ['Swift', 'Objective-C']}}} 
>>> lookup(d, 'iOS') 
['Swift', 'Objective-C'] 

dictioまた、リスト内に存在することもできますが、all_dictsも再帰的にそれらを調整することができます。

関連する問題