在字典或列表中查找更深入

时间:2016-05-16 15:01:08

标签: python list dictionary

伙计们,我有这样的疑问。假设我有一个字典/列表,里面包含其他字典/列表等等。

示例:

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

1 个答案:

答案 0 :(得分: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']

如果列表中也存在字典,您可以调整all_dicts以递归方式进入。