代码之家  ›  专栏  ›  技术社区  ›  Scott

获取没有父键的嵌套字典的子键值

  •  0
  • Scott  · 技术社区  · 6 年前

    似乎有很多这样的问题,但我找不到这个具体的答案。假设我有一本这样的字典:

    {"keyA": 
      {"a": "blue", "b": {"b1": "sky", "b2": "baby", "b3": "navy"},
    
    "keyB": 
      {"x": "horse", "y": {"y1": "stallion", "y2": "thoroughbred"}, "z": {"z1": "white", "z2": "black"}}       
    
    "keyC": "father"
     }
    

    如果我不知道“z1”的父键或父键在字典中的位置,是否有任何简单的方法可以获取“z1”的值(或任何嵌套键)?

    我在想一个递归函数,我把“z1”作为我正在搜索的键传递给它,它在字典中运行,直到匹配为止,但我还没能让它工作。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Gelineau    6 年前

    做一个递归函数是一个很好的猜测:

    data = {'keyA':
      {'a': 'blue', 'b': {'b1': 'sky', 'b2': 'baby', 'b3': 'navy'},
    
    'keyB':
      {'x': 'horse', 'y': {'y1': 'stallion', 'y2': 'thoroughbred'}, 'z': {'z1': 'white', 'z2': 'black'}},
    
    'keyC': 'father'
     }}
    
    
    
    def find_value(data, key):
        if not isinstance(data, dict):
            return None
    
        try:
            return data[key]
        except KeyError:
            for sub_data in data.values():
                sub_value = find_value(sub_data, key)
                if sub_value is not None:
                    return sub_value
    
        return None
    
    print(find_value(data, 'z1'))
    # 'white'
    
    print(find_value(data, 'z4'))
    # None