python之三層菜單遞歸

来源:http://www.cnblogs.com/wushank/archive/2016/01/09/5115273.html
-Advertisement-
Play Games

首先非常感謝11期的學長薜保庫提供了一種非常實用函數遞歸方法,讓實現三層菜單如此簡單,不過對所遍歷的嵌套字典或列表格式有所要求。有特定的環境下非常實用。 主要針對中國的各省市區進行展示,採用了百度的js介面: http://passport.baidu.com/js/site...


 

      首先非常感謝11期的學長薜保庫提供了一種非常實用函數遞歸方法,讓實現三層菜單如此簡單,不過對所遍歷的嵌套字典或列表格式有所要求。有特定的環境下非常實用。

      主要針對中國的各省市區進行展示,採用了百度的js介面:

                  http://passport.baidu.com/js/sitedata_bas.js

      

      格式大概如下:


 

var sitedata =
[
    { name:"請選擇", sub:[{name:"請選擇"}], type:1},
    { name:"北京",  sub:[{name:"請選擇"},{name:"東城區"},{name:"西城區"},{name:"崇文區"},{name:"宣武區"},{name:"朝陽區"},{name:"海澱區"},{name:"丰台區"},{name:"石景山區"},{name:"房山區"},{name:"通州區"},{name:"順義區"},{name:"昌平區"},{name:"大興區"},{name:"懷柔區"},{name:"平谷區"},{name:"門頭溝區"},{name:"密雲縣"},{name:"延慶縣"},{name:"其他"}], type:0},
    { name:"廣東",  sub:[{name:"請選擇",sub:[]},
	   { name:"廣州",  sub:[{name:"請選擇"},{name:"越秀區"},{name:"荔灣區"},{name:"海珠區"},{name:"天河區"},{name:"白雲區"},{name:"黃埔區"},{name:"番禺區"},{name:"花都區"},{name:"南沙區"},{name:"蘿崗區"},{name:"增城市"},{name:"從化市"},{name:"其他"}],type:0},
{ name:"深圳", sub:[{name:"請選擇"},{name:"福田區"},{name:"羅湖區"},{name:"南山區"},{name:"寶安區"},{name:"龍崗區"},{name:"鹽田區"},{name:"其他"}], type:0}, { name:"珠海", sub:[{name:"請選擇"},{name:"香洲區"},{name:"斗門區"},{name:"金灣區"},{name:"其他"}],type:0}, { { name:"汕頭", sub:[{name:"請選擇"},{name:"金平區"},{name:"濠江區"},{name:"龍湖區"},{name:"潮陽區"},{name:"潮南區"},{name:"澄海區"},{name:"南澳縣"},{name:"其他"}],type:0}, { name:"韶關", sub:[{name:"請選擇"},{name:"湞江區"},{name:"武江區"},{name:"曲江區"},{name:"樂昌市"},{name:"南雄市"},{name:"始興縣"},{name:"仁化縣"},{name:"翁源縣"},{name:"新豐縣"},{name:"乳源瑤族自治縣"},{name:"其他"}],type:0}, }


具體代碼如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'xuebk'
import logging
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
logger = logging.getLogger(__name__)

def search_a(sitedata,search=None):
    if search is None:
        for x in sitedata:
            print x['name'],",",
        print
        search = raw_input('請輸入相應名稱.:')
    print "search:"+search
    for i in sitedata:
        if search != i['name']:
            continue
        print('查詢到%s'%(i['name']))
        if 'sub' in i.keys():
            search_a(i['sub'])

if __name__ == '__main__':
    search_a(sitedata_bas)
遞歸調用

 



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Object作為對象中的上帝,我們時刻關註著上帝中的行為。但是上帝之手有時候還不太好用,所以我們有時候要進行覆寫。public String toString(){ //code}public boolean equals(Object obj){ // obj 強轉 // 比較...
  • 1.準備工作 (1)PHP 版本5.6.17 下載地址 PHP官網 (2)Nginx 版本1.8.0 下載地址 Nginx官網 (3)MySQL 版本5.7.10MySQL官網2.php的安裝與配置 直接解壓下載好的php包,到D盤wnmp目錄(D:\wnmp),這裡把解壓出來的文件夾重命名...
  • /*** 導入文件Action;*/private File excelFile;// 保存原始文件名private String excelFileFileName;// 保存原始文件名private String importResult;// 將Excel文件解析完畢後信息存放到這個User對...
  • ADO.NET在Java中的對應技術是JDBC,企業庫DataAccessApplicationBlock模塊在Java中的對應是spring-jdbc模塊,EntityFramework在Java中對應的ORM是Hibernate。關係資料庫、SQL、資料庫事務、分散式事務的概念都是通用的。1.J...
  • 提要01 IO流(BufferedWriter)02 IO流(BufferedReader)03 IO流(通過緩衝區複製文本文件)04 IO流(readLine的原理)05 IO流(MyBufferedReader)06 IO流(裝飾設計模式)07 IO流(裝飾和繼承的區別)01 IO流(Buffe...
  • 以前使用curl的多線程並不是真正的多線程,只是一種模擬的多線程,現在使用pthreads來實現真正意義上的多線程。下載: windows下: http://windows.php.net/downloads/pecl/releases/pthreads/0.0.45/ mac、unix、...
  • 如何將二維數組作為函數的參數傳遞,這是涉及到多維數組時經常要遇到的問題。長期來,我們往往知其然,但不知其所以然。這裡簡單總結一下。1.《C程式設計》中講到:可以用二維數組名作為實參或者形參,在被調用函數中對形參數組定義時可以指定所有維數的大小,也可以省略第一維的大小說明,如:void Func(in...
  • 博客地址:http://www.cnblogs.com/oumyye/問題一:==與equal的區別?==和 equals 都是比較的,而前者是運算符,後者則是一個方法,基本數據類型和引用數據類型都可以使用運算符==,而只有引用類型數據才可以使用 equals,下麵具體介紹一下兩者的用法以及區別.=...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...