【问题标题】:Finding a parent key from a dict given an intermediate key using python使用python从给定中间键的dict中查找父键
【发布时间】:2015-10-15 15:12:41
【问题描述】:

我有一本像这样的字典:

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

我希望能够编写一个函数,这样如果我提供一个搜索对象,例如“mod1”,它就会为我提供作为“dev1”的父键。

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

我已经尝试了下面链接中提到的东西:

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

Find a key in a python dictionary and return its parents

【问题讨论】:

  • 你能告诉我们一些你尝试过的东西吗?
  • 你尝试了什么?您将不得不手动遍历整个字典树以查找目标键。此外,不能保证它只会发生一次。
  • 您链接的解决方案有什么问题?
  • 编辑显示了我尝试过的内容。 @BrenBarn 我知道我必须走 dict 才能获得目标键。但是有没有办法检索父密钥?我知道会有重复。但是有没有办法获取包含此密钥的列表?
  • @MorganThrapp - 它们似乎不适用于我拥有的 dict 结构。当我试用它们时,我没有得到任何回报。

标签: python


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

【讨论】:

  • 谢谢!遍历这个并递归调用这个函数应该得到我想要的! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2016-03-14
  • 2011-09-15
相关资源
最近更新 更多