simple_dict?=?{
Large_dict?:?{'middle_dict1 '?:?{'small_dict1 '?:?1?,
small_dict2 '?:?2},
middle_dict2 '?:?{'small_dict3 '?:?3?,
small_dict4 '?:?4,
small _ dict 5 ':{ ' small _ dict 10 '?:?1?,
small _ dict 22’?:?3},
},
}
}
#?需求分析:?從嵌套字典中,找到值為3的路徑關系。
#?簡化模型:從值3?遞歸到上層?鑰匙?遞歸過程保存當前遞歸路徑和當前層。
#?1.找出字典1中有多少層* * *:
數數?=?0
路徑?=?''#?設置path的全局變量。
結果?=?[]#?記錄結論
def?get_count(字典_測試):
全球?計數#?聲明每次遞歸都會改變全局變量。
全球?路徑#?拼接時間表,妳的路
全球?結果#?記錄結果
為了什麽?我?在?字典測試:
如果?type(dict_test[i])。__name__?=='dict '?:
#?如果是字典,繼續向下展開,即進行遞歸:
如果?數數?==?0:?#?增加判斷力?淘汰第壹個?& lt-?出現,邏輯問題
路徑?=?路徑+?我
否則:
路徑?=?路徑?+?& lt-'?+?我
數數?+=?1#?記錄層數
get_count(字典測試[i])
否則:
嘗試:
#?如果不是字典呢?它是壹個鍵值對,查詢值是否為3。目前I包含兩個內容,壹個是key,壹個是value。
如果?dict_test[i]?==?3:
#?發現價值?=3?的價值
Result.append(f "路徑是:?%s,在%d層"?%?(路徑?+?& lt-'?+?我,?計數))
除了?例外?asresult:#?雖然字典限制了寫法,為了增加魯棒性?在這個位置使用Try指令是為了避免類型錯誤。
打印(結果)
繼續
如果?__name__?==?__main__ ':
get_count(simple_dict)#?執行遞歸函數
[print(str(i?+?1)?+?':'?+?j)?為了什麽?我,?j?在?枚舉(結果)]#?打印結果
'''
結果:?
1:路徑是:?Large _ dict & lt-middle _ dict 1 & lt;-middle _ dict 2 & lt;-small_dict3,在3樓。
2:路徑是:?Large _ dict & lt-middle _ dict 1 & lt;-middle _ dict 2 & lt;-small _ dict 5 & lt;-small_dict22,4樓。
'''