【问题标题】:Find deeper in dictionary or list [duplicate]在字典或列表中更深入地查找 [重复]
【发布时间】:2016-09-12 10:14:31
【问题描述】:

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

例子:

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

【问题讨论】:

  • 最简单的方法是编写递归函数。

标签: python list dictionary


【解决方案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']

如果字典也可以存在于列表中,您可以调整 all_dicts 以递归地加入这些列表。

【讨论】:

    猜你喜欢
    • 2019-01-15
    • 2022-01-22
    • 2021-06-03
    • 2021-11-17
    • 2018-10-15
    • 2021-09-01
    • 1970-01-01
    • 2023-01-07
    相关资源
    最近更新 更多