有一个树状字典,结构如下
A = { 'LINE': 12561, 'CLASS': 'TYPEDEF', 'TYPE': 'STRUCT', 'OFFSET': nan, 'SIZE': 12047, 'Member': { 'A1': {'LINE': 12562, 'CLASS': 'MEMBER', 'TYPE': 'U_LONG', 'OFFSET': 0, 'SIZE': 4}, 'A2': {'LINE': 12566, 'CLASS': 'MEMBER', 'TYPE': 'STRUCT', 'OFFSET': 12, 'SIZE': 387, 'Member': { 'A2_1': { 'LINE': 12516, 'CLASS': 'MEMBER', 'TYPE': 'ARRAY', 'OFFSET': 0, 'SIZE': 128, 'Member': { 'A2_1_1': { 'LINE': 13320, 'CLASS': 'TYPEDEF', 'TYPE': 'UNION', 'OFFSET': 0, 'SIZE': 2}, 'A2_1_2': { 'LINE': 13320, 'CLASS': 'TYPEDEF', 'TYPE': 'UNION', 'OFFSET': 2, 'SIZE': 2}}}}}}}
每个key里面固定会有'LINE'、'CLASS'、'TYPE'、'OFFSET'、'SIZE'五个key及对应的value,若有'Member'的话代表还有有下一层
目标为遍历所有Member里的key,取出所有的OFFSET值并print出来,结果希望如下
A : 0A1 : 0A2 : 12 A2_1 : 0 A2_1_1 : 0 A2_1_2 : 2
其实就是基本的树状遍历,只是写成递迴就很容易搞混,因此写下来记录一下
def getList(Dict,aboveName = None,layer = 0): for i in range(layer): print("\t",end='') print(aboveName,":",Dict['OFFSET']) for k in Dict.keys(): if k =='Member': for kk in Dict['Member'].keys(): getList(Dict = Dict['Member'][kk], aboveName = kk, layer = layer + 1)