1. 程式人生 > >Python遞迴實現多層巢狀dict遍歷例項--三級選單/多級選單功能

Python遞迴實現多層巢狀dict遍歷例項--三級選單/多級選單功能

要求:構建一個三(N)級選單,實現使用者可以根據指示選擇進入選單,退出選單,返回上層選單功能。
知識點:dict資料的遍歷方法,遞迴遍歷方法。

環境:Python3.6

實現程式碼:

#!/usr/bin/evn python
# -*-coding:utf8 -*-
class menu(object):
    def __init__(self, menus):
        self.menus = menus
    def view_dict(self,menu):
        print('請輸入進入地區,輸入"b"返回上層選單,輸入"q"退出'.center(40, '-'))
        print
('\n'.join([str(key) for key in menu])) choice = input("請選擇>>:") if choice == 'q': exit() elif choice == 'b': if menu != self.menus: return else: print('已經是最頂層目錄,請選擇或退出,謝謝'.center(40,' ')) self
.view_dict(menu) elif choice in [key for key in menu]: if type(menu[choice]).__name__=='dict': self.view_dict(menu[choice]) self.view_dict(menu) else: print('\n'.join([item for item in menu[choice]])) print
('已經是最後一層,返回請輸入"b",退出請輸入"q",謝謝!'.center(40,'*')) self.view_dict(menu) else: print('請輸入正確口令,謝謝!') self.view_dict(menu) if __name__=='__main__': zone = { '山東': { '青島': ['四方', '黃島', '嶗山', '李滄', '城陽'], '濟南': ['歷城', '槐蔭', '高新', '長青', '章丘'], '煙臺': ['龍口', '萊山', '牟平', '蓬萊', '招遠'] }, '江蘇': { '蘇州': ['滄浪', '相城', '平江', '吳中', '崑山'], '南京': ['白下', '秦淮', '浦口', '棲霞', '江寧'], '無錫': ['崇安', '南長', '北塘', '錫山', '江陰'] }, '浙江': { '杭州': ['西湖', '江干', '下城', '上城', '濱江'], '寧波': ['海曙', '江東', '江北', '鎮海', '餘姚'], '溫州': ['鹿城', '龍灣', '樂清', '瑞安', '永嘉'] }, '安徽': { '合肥': ['蜀山', '廬陽', '包河', '經開', '新站'], '蕪湖': ['鏡湖', '鳩江', '無為', '三山', '南陵'], '蚌埠': ['蚌山', '龍子湖', '淮上', '懷遠', '固鎮'] }, '廣東': { '深圳': ['羅湖', '福田', '南山', '寶安', '布吉'], '廣州': ['天河', '珠海', '越秀', '白雲', '黃埔'], '東莞': ['莞城', '長安', '虎門', '萬江', '大朗'] }} view = menu(zone) view.view_dict(zone)

執行結果:





相關推薦

Python實現dict例項--三級選單/多級選單功能

要求:構建一個三(N)級選單,實現使用者可以根據指示選擇進入選單,退出選單,返回上層選單功能。知識點:dict資料的遍歷方法,遞迴遍歷方法。環境:Python3.6實現程式碼:#!/usr/bin/evn python # -*-coding:utf8 -*- class m

ThinkPHP5 資源分組路由配置方法(可以根據需要實現,注意:資源分組路由配置順序依次是層次遞減)

use think\Route; //資源巢狀分組路由配置方法(可以根據需要實現多層巢狀,注意:分組路由配置順序依次是巢狀層次遞減): // 更改巢狀資源路由blogs資源的資源變數名為blog_id //從表路由(分組路由配置順序必須是從表路由優先配置,否則從表路由一

ThinkPHP5 資源路由配置方法(可以根據需要實現)

use think\Route; //資源巢狀路由配置方法(可以根據需要實現多層巢狀): // 更改巢狀資源路由blogs資源的資源變數名為blog_id Route::resource('blogs','index/Blog',['var'=>['blogs'=&g

Binary Tree Postorder Traversal 非實現二叉樹後序

Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 \ 2 / 3 return 

Python之路Python全域性變數與區域性變數、函式、函式 Python之路Python全域性變數與區域性變數、函式、函式

Python之路Python全域性變數與區域性變數、函式多層巢狀、函式遞迴 一、區域性變數與全域性變數   1、在子程式中定義的變數稱為區域性變數,在程式的一開始定義的變數稱為全域性變數。全域性變數作用域是整個程式,區域性變數作用域是定義該變數的子程式。 全域性變數

python轉換為一維列表

1.遞迴方式 [1,2,[3,[4,5],6]] def expand_list(nested_list): for item in nested_list: if isinstance(item, (list, tuple)): fo

Python列印列表

列表中巢狀列表 遞迴呼叫,將列表幾巢狀中的列表元素append到一個新列表中 如下列表 [ 1, 2, [ 3, 4, [ 5, 6,

python 簡單計算器演算法 括號處理

用python編寫一個簡單計算器 計算器開發需求 實現加減乘除及拓號優先順序解析 使用者輸入 # 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (

python列表的拆分

場景:有一個多層巢狀的列表如:[[23],[3,3],[22,22],1,123,[[123,a],2]] 拆分成: def splitlist(list):     '''         現有一個列表,裡面元素包括 數字,字母,列表,字典等元素,現在要將字典去掉,並將列

後的 Fragment 懶載入實現

多層巢狀後的 Fragment 懶載入 印象中從 Feed 流應用流行開始,Fragment 懶載入變成了一個大家都需要關注的開發知識,關於 Fragment 的懶載入,網上有很多例子,GitHub 上也有很多例子,就連我自己在一年前也寫過相關的文章。

Python對商品屬性進行二次分類並輸出字典

題目有點長,感覺好像也解釋的不太清楚,但是大概意思就是,我們在逛一個網站的時候,譬如天貓,你會看到有“女裝”、“男鞋”、“手機”等等分類,點選進去又會有相應的品牌,女裝下面會有“snidle”、“伊芙麗”等品牌,男鞋下面會有“nike”、“adidas”等分類,

關於python中列表的拆開(自用)

假設存在列表形如 list_1 = [[1, 2], [3, 4, 5], [6, 7], [8], [9]] ,則 使用遍歷查詢列表元素 list_1 = [[1, 2], [3, 4, 5], [6, 7], [8], [9]]; for

python 跳轉的方法

#跳轉 #Python 不支援 goto 和 label,想要在多層巢狀迴圈中跳轉,稍稍有些麻煩。最簡單的做法 #是設定跳轉標誌,並在相應位置檢查。 def test(): stop = False while True: while Tru

迴圈取的JsonArray中的值,最後一可以是JsonArray也可以是jsonObject

/** * @param jsonStr json字串 * @param key 具體取值上一級對應的所有的 Key * @param value 具體取值對應的所有的key * @param type type 是最後一個key對應的是array還是jsonObject

php程式設計中require和include導致檔案找不到的錯誤

php中include和require可以包含其他檔案 但常引入的是一個相對路徑 如此會產生一個檔案,如下: 例如: (網站根目錄) ├資料夾A │ │ │ └1.php ├資料夾B │ │

Java異常處理的基本流程

       異常是程式中的一些錯誤,但並不是所有的錯誤都是異常,錯誤有時候是可以避免的。異常的物件有兩個來源,一是Java執行時環境自動丟擲系統生成的異常,而不管你是否願意捕獲和處理,它總要被丟擲!比如除數為0的異常。二是程式設計師自己丟擲的異常,這個異常可以是程式設

上拉載入,包裹任意佈局,listview

  上拉載入是在原生控制元件swipeRefreshlayout的基礎上增加的功能,實現方式網上copy就行。主要是refreshLayout包裹多層佈局,多個listview的時候,操作的是那個listview。程式碼可以看出所有上拉載入的操作均在佈局繪製完成,且資料載入完畢以後,能夠對

iOS開發-block中如何使用__weak和__strong

1、關於__weak __weak只能在ARC模式下使用,也只能修飾物件(比如NSString等),不能修飾基本資料型別(比如int等) __weak修飾的物件在block中不可以被重新賦值。 __weak只在ARC下使用,可以避免迴圈引用。 __weak修飾物

html中的超連結中比如有,就會導致字串被擷取,等等等等很多問題

html中的超連結中比如有多層巢狀,就會導致字串被擷取,等等等等很多問題 引號巢狀兩層時,可以使用轉義或者單雙引號交替的形式實現,當引號巢狀達到三四層的時候,問題就出現了,怎麼解決呢? 舉個例子:"javascript:fnabc('abcd("123")')" html的href=以上

scrapy 提取標籤下的所有文字

怎樣才能一次性提取多層巢狀標籤的所有文字,詳細如下: 假如頁面如下: <p id='test'>hello<b>world!</b></p> 我要的提取結果是:world!(假設world是很多標籤組合的文字)