2016-05-16 32 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

首先,一个辅助功能,找到所有类型的字典:

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'] 

If dictio naries也可以存在于列表中,您可以调整all_dicts以递归方式进入这些列表。