python-獲取dict的key 路徑

有時候我們想獲取key,這個好辦直接遍歷判斷就行, 如果想獲取key 在的路徑 就顯得比較麻煩,下邊的演示就是獲取key 路徑, 核心思想是遞歸

import copy

demo_dect = {
    'TASKBAR': {
        'WINKEY': {
            'CLOUDMUSIC': 0
        },
        'POWER': {
            'POWER_OPTIONS': 0
        }

    },
    'DESKTOP': {
        'THIS_PC': {
            'TUDOU': 0,
'POWER_OPTIONS': 0

        }
    }
}
a=['TASKBAR', 'WINKEY', 'POWER', 'POWER_OPTIONS']
['TASKBAR', 'POWER', 'POWER_OPTIONS']


def find_by_exhaustion(input_key, current_dict, router):
    '''
    :param input_key:  the key you given
    :param current_dict: the dict you have to scan
    :param router: record your route to reach here
    :return:
    '''
    router = copy.deepcopy(router)
    for index, key in enumerate(current_dict):
        val = current_dict.get(key)
        if input_key == key:
            router.append(key)
            return val, router
        elif type(val) == type({}):
            router.append(key)
            result_tuple = find_by_exhaustion(input_key, val, router)
            if result_tuple:
                return result_tuple[0], result_tuple[1]
            else:
                if router:
                    router = router[0:len(router) -1]



def dtest_fun():
    '''
    this function show you how to use and test your program.
    :return:
    '''
    key_list = [ 'POWER_OPTIONS']
    for input_key in key_list:
        print ('*' * 25,)
        print (input_key,)
        print ('*' * 25)

        router = []
        result = find_by_exhaustion(input_key, demo_dect, router)
        if result:
            print( 'value:')
            print (result[0])
            print ('router:')
            print (result[1])


if __name__ == '__main__':
    dtest_fun()

發佈了265 篇原創文章 · 獲贊 145 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章