适用存在重复节点的多层json
def find(dic):
result = {}
def findpath(dic, temp):
for k, v in dic.items():
if isinstance(v, dict):
temp += '.{}'.format(str(k))
findpath(v, temp)
else:
temp += '.{}'.format(str(k))
result[temp[1:]] = v
# 每次退出递归函数时,去除路径中的当前节点
# 这里先将路径倒叙是防止将前面重复名称节点删除
temp = temp[::-1].replace('{}.'.format(k), '', 1)[::-1]
findpath(dic, '')
return result
main函数:
if __name__ == '__main__':
d = {
'a': {'b': 1},
'c': {'d': {'e': 1, 't': 1},
'aa': {
'g': {
'aa': {
'ee': 5
},
'bb': 2,
'cc': {
'dd': 4
}
},
'i': 1}
},
'tt': {'jj': 1}}
print(find(d))
执行效果:
{'a.b': 1, 'c.d.e': 1, 'c.d.t': 1, 'c.aa.g.aa.ee': 5, 'c.aa.g.bb': 2, 'c.aa.g.cc.dd': 4, 'c.aa.i': 1, 'tt.jj': 1}