Python根据value输出嵌套字典dict中所有的key,value,包括上级

有一个树形结构:
var data = {
key1: ‘str1’,
key2: {
key3: ‘str3’,
key4: ‘str4’,
key5: {
key6: ‘str6’
}
},
//…
}
实现一个方法getKeys(data, str); 获取字符串str在data中的所有上级节点名称,
例如:
getKeys(data, ‘str1’) 返回 ‘key1’
getKeys(data, ‘str3’) 返回 ‘key2 key3’
getKeys(data, ‘str6’) 返回 ‘key2 key5 key6’

实现如下:

import json

var_data = {
    'key1': 'str1',
    'key2': {
        'key3': 'str3',
        'key4': 'str4',
        'key5': {
            'key6': 'str6'
        }
    }
}

# keys = var_data.keys()
# dic = var_data.items()
# print(type(dic))
# print(type(json.dumps(var_data)))
# str = json.dumps(var_data)
# jsonstr = json.loads(str)
# print(type(jsonstr))
# key = var_data.get('key2')
# print(type(key))
# 
# for k, v in var_data.items():
#     if v == 'str1':
#         print(k)
res = []
def find_key(str, data):
    if isinstance(data, dict):
        for k, v in data.items():
            if v == str:
                res.append(k)
                print(res)
                break
            else:
                if isinstance(v, dict):
                    res.append(k)
                    find_key(str, v)


str1 = ''
find_key('str6', var_data)
for key in res:
    str1 = str1 + key
print(str1)

纠正结果:

var_data = {
    'key1': 'str1',
    'key2': {
        'key3': 'str3',
        'key4': 'str4',
        'key5': {
            'key6': 'str6'
        },
        'key7': 'str7',
    },
    'key8': 'str8',
}


res = {}


def find_key(strkey, data):
    if isinstance(data, dict):
        for key, value in data.items():
            find_key(strkey + key, value)
    else:
        res[strkey] = data


def get_key(str, data):
    find_key('', var_data)
    print(res)
    for k, v in res.items():
        if v == str:
            print(k)


get_key('str6', var_data)

你可能感兴趣的:(python,开发语言)