使用python从给定中间键的dict中查找父键

时间:2015-07-24 20:21:16

标签: python

我的字典看起来像这样:

d = {'dev':
        {<dev1>:
             {'mod':
                 {<mod1>:
                     {'port': [1, 2, 3]
                            }
                  }
              }
         <dev2>:
             {'mod':
                 {<mod3>:
                       {'port': [] }
                 }
             }
       }
  }

我希望能够编写一个函数,这样如果我提供了一个搜索对象,例如&#39; mod1&#39;,它会为我提供父键作为&#39; dev1&#39;。

我已经搜遍了所有的东西并尝试了很多东西,但似乎无法让它发挥作用。任何帮助将不胜感激!

我已尝试过以下链接中提到的内容:

Python--Finding Parent Keys for a specific value in a nested dictionary

Find a key in a python dictionary and return its parents

1 个答案:

答案 0 :(得分:1)

这应该有效:

def find_parent_keys(d, target_key, parent_key=None):
  for k, v in d.items():
    if k == target_key:
      yield parent_key
    if isinstance(v, dict):
      for res in find_parent_keys(v, target_key, k):
        yield res

用法:

d = {
  'dev': {
    'dev1': {
      'mod': {
        'mod1': {'port': [1, 2, 3]},
      },
    },
    'dev2': {
      'mod': {
        'mod3': {'port': []},
      },
    },
  },
}

print list(find_parent_keys(d, 'mod'))
print list(find_parent_keys(d, 'dev'))

输出:

['dev2', 'dev1']
[None]