成语大全网 - 汉语词典 - python3 如何解析多层嵌套字典,具体内容打开看

python3 如何解析多层嵌套字典,具体内容打开看

# 见 代码 ,代码粘贴上不带格式,按照图片用tab键调整一下,图片是核心部分

simple_dict?=?{

'Large_dict'?:?{'middle_dict1'?:?{'small_dict1'?:?1?,

'small_dict2'?:?2},

'middle_dict2'?:?{'small_dict3'?:?3?,

'small_dict4'?:?4,

'small_dict5':{'small_dict10'?:?1?,

'small_dict22'?:?3},

},

}

}

#?需求分析:?从嵌套字典中,找到值为3的路径关系

#?简化模型:从value为3的值?递归向上层的?key?,递归过程保存当前已经递归的路径和当前层

#?1.找到字典一***有多少层:

count?=?0

path?=?''#?设置路径的全局变量

result?=?[]#?记录结论

def?get_count(dict_test):

global?count#?声明每次递归均是改变全局变量

global?path#?拼接档期啊你的路径

global?result#?记录结果

for?i?in?dict_test:

if?type(dict_test[i]).__name__?=='dict'?:

#?如果是字典,则继续向下展开,即执行递归:

if?count?==?0:?#?增加判断?消除第一个?<-?出现,逻辑问题

path?=?path+?i

else:

path?=?path?+?'<-'?+?i

count?+=?1#?记录层数

get_count(dict_test[i])

else:

try:

#?如果不是字典?则是键值对,查询value值是不是3,当前i包含两个内容,一个是key,一个是value

if?dict_test[i]?==?3:

#?找到了value?=3?的值

result.append(f"路径是:?%s,在第%d层"?%?(path?+?'<-'?+?i,?count))

except?Exception?asresult:#?虽然字典限定了写法,为了增加健壮性?此位置使用try指令,避免类型错误

print(result)

continue

if?__name__?==?'__main__':

get_count(simple_dict)#?执行递归函数

[print(str(i?+?1)?+?':'?+?j)?for?i,?j?in?enumerate(result)]#?打印结果

'''

结果:?

1:路径是:?Large_dict<-middle_dict1<-middle_dict2<-small_dict3,在第3层

2:路径是:?Large_dict<-middle_dict1<-middle_dict2<-small_dict5<-small_dict22,在第4层

'''