1. 程式人生 > >【10】Python學習筆記:簡單的多級目錄(字典巢狀)

【10】Python學習筆記:簡單的多級目錄(字典巢狀)

簡單的多級目錄(字典巢狀)

# 建立多級目錄,具有增加節點,檢視節點,及返回上一級的功能
db = {
    '北京' : {},
    '上海' : {},
    '廣州' : {
        '天河區' : {},
        '荔灣區' : {},
        '白雲區' : {
            '白雲山' : {}
        }
    }
}
path = []

while True:
    temp = db
    for item in path:
        temp = temp[item]
    print('當前所有可選節點:',list(temp.keys()),'\n')

    choice = input("1:新增節點; 2:檢視節點(Q退出/B返回上一級)\n>>>")
    if choice == '1':
        k = input('請輸入要增加的子節點的名稱:')
        if k in temp:
            print('子節點已存在')
        else:
            temp[k] = {}
    elif choice == '2':
        k = input('請輸入要檢視的子節點:')
        if k in temp:
            path.append(k)
        else:
            print('子節點名稱錯誤')
    elif choice.lower() == 'q':
        break
    elif choice.lower() == 'b':
        if path:
            path.pop()
    else:
        print('輸入不合法,請重新輸入\n>>>')
思路大致如下:
1. 建立多級字典(用於測試和驗證)
2. 該目錄具有增加節點,檢視節點,及返回上一級的功能,因此用變數choice來記錄操作
3. 為了便於在字典各級之間切換,建立列表path用於記錄路徑,path各元素的值就是字典對應各級的鍵,path的長度即字典當前節點的深度
4. 檢視節點時,將輸入的子節點名稱新增進path列表,並將path列表中的元素作為字典的索引。
        k = input('請輸入要檢視的子節點:')
        if k in temp:
            path.append(k)
        else:
            print('子節點名稱錯誤')
由於當前節點深度可以大於1,因此需引入新的變數temp來進行迭代操作(用for對path列表中的各元素來重複進行字典索引,
即
    temp = db
    for item in path:
        temp = temp[item]
    print('當前所有可選節點:',list(temp.keys()),'\n')
5. 增加節點時,可以方便地利用剛才的temp變數來操作
    choice = input("1:新增節點; 2:檢視節點(Q退出/B返回上一級)\n>>>")
    if choice == '1':
        k = input('請輸入要增加的子節點的名稱:')
        if k in temp:
            print('子節點已存在')
        else:
            temp[k] = {}
6. 返回上一級時,由於path列表用於記錄路徑,因此將path列表最後一個元素刪除,再重新列印即可
    elif choice.lower() == 'b':
        if path:
            path.pop()
7.  退出時,即相當於執行break跳出while迴圈。