python,字典嵌套字典的情况,如何根据value获取对应的key?
比如这个例子:
d = {'a':{'name':'zhangsan','age':20},'b':{'name':'lisi','age':38}}
如果给出了38,想要获取结果“b”,应该怎么做呢?
可以通过遍历字典嵌套字典的方式,逐层查找对应的key和value。具体实现代码如下:
def get_key(d, value):
for k, v in d.items():
if isinstance(v, dict):
res = get_key(v, value)
if res:
return k + '.' + res
elif v == value:
return k
return ''
d = {'a':{'name':'zhangsan','age':20},'b':{'name':'lisi','age':38}}
print(get_key(d, 38)) # 输出b.age
其中,isinstance(v, dict)用于判断当前value是否为字典,如果是,则递归调用get_key函数;否则,判断当前value是否等于目标value,如果是,则返回对应的key。如果遍历完整个字典,仍未找到对应的key,则返回空字符串。需要注意的是,由于字典嵌套字典,因此在返回key时,需要将每一层的key用.连接起来。
参考一下
def get_key_by_value(dicts, value):
for k, v in dicts.items():
if isinstance(v, dict):
result = get_key_by_value(v, value)
if result:
return result
elif v == value:
return k
return None
d = {'a':{'name':'zhangsan','age':20},'b':{'name':'lisi','age':38}}
result = get_key_by_value(d, 38)
print(result) # 输出 'b'
可以遍历字典,找到对应的value并返回对应的key:
def get_key(d, value):
for k, v in d.items():
if isinstance(v, dict):
inner_key = get_key(v, value)
if inner_key:
return inner_key
elif v == value:
return k
使用示例:
d = {'a':{'name':'zhangsan','age':20},'b':{'name':'lisi','age':38}}
print(get_key(d, 38)) # 输出 b
a.keys() - b.keys()