在嵌套Python目录中搜索关键字

在嵌套Python目录中搜索关键字,python,dictionary,Python,Dictionary,我想在Python dict中搜索键值对。我的dict是嵌套的,所以简单的解决方案如下: if 'keyname' in my_dict: ... 或: 不适合我。 这是我的格言: my_dict = {'a': 111, 'b': 222, 'c':{'d': 333, 'e': 444}, 'f':555, 'g':{'h': {'i': 666}}} 我想找到“I”或

我想在Python dict中搜索键值对。我的dict是嵌套的,所以简单的解决方案如下:

if 'keyname' in my_dict:
...
或:

不适合我。 这是我的格言:

my_dict = {'a': 111,
           'b': 222,
           'c':{'d': 333,
                'e': 444},
           'f':555,
           'g':{'h': {'i': 666}}}
我想找到“I”或“d”的值,最简单的方法是什么? 我不关心具有嵌套dict的键的名称。例如,我不关心键名“c”或“g”或“h”,我只关心键值(键号)。 有没有一种方法可以将我的dict变成这样:

my_result = {'a': 111,
             'b': 222,
             'd': 333,
             'e': 444,
             'f': 555,
             'i': 666}

这样就很容易了。

您可以在这里使用递归将字典展平

def平坦(数据):
out={}
对于data.items()中的k,v:
如果存在(v,dict):
更新(平(v))
其他:
out[k]=v
返回
扁平(我的字典)
#{'a':111,'b':222,'d':333,'e':444,'f':555,'i':666}
试试这个:

def find_value(_key, _dict):
    for key, value in list(_dict.items()):
        if isinstance(value, dict):
            result = find_value(_key, value)
            if result:
                return result
        if key == _key:
            return value

这里要考虑的事情:1)一个键是否有可能出现不止一次,比如嵌套在两个不同的高级键下?2) 您的示例仅包含整数和dict作为值。这是你可以指望永远是真的吗?3) 你建议把字典弄平。您希望在同一个dict上搜索多个键,还是只搜索一个或两个键?这有助于确定平坦化的处理时间是否值得,或者是否应该递归搜索。如果我有一个列表而不是嵌套的dict,那么我有一个dict,它的值是dict列表?
def find_value(_key, _dict):
    for key, value in list(_dict.items()):
        if isinstance(value, dict):
            result = find_value(_key, value)
            if result:
                return result
        if key == _key:
            return value