有一个树形结构:
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)