如何在Python嵌套字典中根据值获取其父键?
如何在嵌套字典中查找指定键的父键?
先看给定的嵌套字典:
my_dict = {'a': {'spam': {'foo': None, 'bar': None, 'baz': None},'eggs': None}, 'b': {'ham': None}}
需求很明确:输入某个键,返回它的父键——比如查spam返回a,查bar返回spam,如果是顶层的键(比如b),就返回None。
直接写个递归函数就能解决,代码如下:
def find_parent_key(target, current_dict, parent_key=None): for key, value in current_dict.items(): # 找到目标键,返回它的父键 if key == target: return parent_key # 如果当前值是字典,递归进去找 if isinstance(value, dict): result = find_parent_key(target, value, key) # 递归找到结果就直接返回 if result is not None: return result # 遍历完没找到,返回None return None
测试一下:
my_dict = {'a': {'spam': {'foo': None, 'bar': None, 'baz': None},'eggs': None}, 'b': {'ham': None}} print(find_parent_key('spam', my_dict)) # 输出: a print(find_parent_key('bar', my_dict)) # 输出: spam print(find_parent_key('b', my_dict)) # 输出: None print(find_parent_key('ham', my_dict)) # 输出: b
这个函数的逻辑很简单:
- 从顶层字典开始遍历,每进入下一层子字典,就把当前层的键当作父键传进去
- 一旦碰到目标键,直接返回记录的父键;顶层键的父键是初始的
None,正好符合要求 - 如果在子字典里找到了结果,就层层往上返回这个结果;要是遍历完所有层级都没找到目标键,就返回
None
内容的提问来源于stack exchange,提问作者Adam Albu
相关产品推荐
相关产品推荐

