data_source = {
"servers": {
"uat": {
'list': [{"uat_1": 'uat_1'}, {'uat_2': 'uat_2'}],
"pkey": True,
"user": "testval",
"pass": True
},
"dev": {
'list_dic': [
{"item_1":
[
{'x1': 'x11', 'x_2': 'x22'},
{'x1_2': 'x11', 'x_2_2': 'x22'}
]
},
{'item_2': 2}
],
"pkey": True,
"user": "testval",
"pass": True
}
}
}
def traverse(data, path=None):
if not path:
path = []
if isinstance(data, dict):
for key in data.keys():
local_path = path[:]
local_path.append({
'type': "key",
'value': key
})
for b in traverse(data[key], local_path):
yield b
elif isinstance(data, list):
for item in data:
local_path = path[:]
local_path.append({
'type': 'index',
'value': data.index(item)
})
for b in traverse(item, local_path):
yield b
else:
yield path, data
s = traverse(data_source, )
for _ in s:
print(_)
t = []
for a in _[0]:
if a['type']=='key':
t.append(a['value'])
elif a['type']=='index':
t.append(str(a['value']))
print(t, _[1])
嵌套字典遍历取值,并得到值的键路径
最新推荐文章于 2024-02-18 15:21:07 发布