《金哥百變Python零基礎(chǔ)教程6》~字典

本章知識點(diǎn) :> 字典

北京地鐵2號線
  • 本章介紹的是 字典, 字典也是一種組合數(shù)據(jù)類型碎紊,跟列表只有一個(gè)不同點(diǎn)(幾乎就是孿生兄弟)
  • 現(xiàn)在我們一邊復(fù)習(xí)列表的操作,一遍講對應(yīng)的字典操作

字典與列表
  • 假設(shè)現(xiàn)在有一本中英文對照字典,內(nèi)容包括("你好" - 'hello') ("中國" - 'china') ("生活" - ’life') ("男孩" - ‘boy’) ... ...

  • 這樣的一對對的詞組

  • 思考:用list怎么存儲(chǔ)這個(gè)中英文字典呢封恰?(要考慮后面用中文去查找對應(yīng)的英文)

  • 思路1:用兩個(gè)列表违霞,一個(gè)存儲(chǔ)中文灭抑,一個(gè)存儲(chǔ)英文(用下標(biāo)1-1對應(yīng))
    list1 = ["你好","中國","生活","男孩"]
    list2 = ['hello','china',’life',‘boy’]

  • 思路2:用一個(gè)列表檩淋,每一個(gè)元素還是一個(gè)列表(存儲(chǔ)中英文對)
    list = [
    ["你好" , 'hello'],
    ["中國" , 'china'],
    ["生活" , ’life'],
    ["男孩" , ‘boy’]
    ]

  • 直接用列表來存儲(chǔ)這個(gè)字典,都無法直接通過中文找到英文(需要先找到下標(biāo)在讶,再找到英文)

  • 字典(Python里的字典類型)則可以直接通過中文找到英文

  • 看一下:
    d = {
    "你好" : 'hello',
    "中國" : 'china',
    "生活" : ’life',
    "男孩" : ‘boy’
    }
    d["中國"] #結(jié)果為hello
    試一下 在線Python

  • 語法是這樣的:


    image.png
  • 易錯(cuò)點(diǎn):用 [ ] 表示 列表煞抬; 用 {} 表示 字典

  • 易錯(cuò)點(diǎn):關(guān)鍵是理解 , 在列表里,用0,1,2,3 來表示變量的位置(還記得嗎)构哺;在 字典 里革答,用 “中國” , 1, "abc"
    來表示變量的 key(也就是)

  • 在列表里這樣訪問數(shù)據(jù),list[1] list[0] 字典里 d["a"] d["中國"]

  • 易錯(cuò)點(diǎn):在列表里的變量可以是不同類型;字典里也一樣
    d = {
    "a" : [1,2,3],
    "b" : True
    }
    試一下 在線Python


字典訪問
  • 列表訪問

list1 = ["你好","中國","生活","男孩"]
list2 = ['hello','china',’life',‘boy’]
i = list.index('中國')
list2[i] #結(jié)果為hello

  • 字典訪問
    d = {
    "你好" : 'hello',
    "中國" : 'china',
    "生活" : ’life',
    "男孩" : ‘boy’
    }
    d["中國"] #結(jié)果為hello
    試一下 在線Python

字典函數(shù)
  • 如何判斷一個(gè)元素在列表里
    list1 = ["你好","中國","生活","男孩"]
    list2 = ['hello','china',’life',‘boy’]
    i = list.index('中國')
    if i >=0:
    ????print("在")
    試一下 在線Python

  • 如何判斷一個(gè)元素在字典里
    d = {
    "你好" : 'hello',
    "中國" : 'china',
    "生活" : ’life',
    "男孩" : ‘boy’
    }
    if ‘中國' in d:
    ????print("在")
    試一下 在線Python

  • 易錯(cuò)點(diǎn):在字典的判斷曙强,直接用 x in dict 的語法即可

  • len函數(shù) 可以用在列表和字典上
    d = {
    "你好" : 'hello',
    "中國" : 'china',
    "生活" : ’life',
    "男孩" : ‘boy’
    }
    print(len(d))
    試一下 在線Python

  • 添加元素(字典更加方便), 比如:添加一對單詞 ('女孩' - 'girl')
    d['女孩'] = 'girl'
    print(d)
    試一下 在線Python

  • del 可以用于列表和字典的刪除元素
    del d['男孩']
    print(d)
    試一下 在線Python


for 循環(huán)

list = [1,2,3,4,5]
for i in list:
????print(i)
試一下 在線Python

  • 這是一個(gè)列表遍歷算法
  • 字典的遍歷非常類似

d = {
"你好" : 'hello',
"中國" : 'china',
"生活" : ’life',
"男孩" : ‘boy’
}
for ch,en in d.items():
????print(ch + '-->' + en)
試一下 在線Python

  • 注意用d.items() 函數(shù)取出所有 鍵-值
  • 沒有辦法, 列表字典 就是這么形影不離残拐,如果我們可以對照著理解,就會(huì)特別好記碟嘴!

單詞計(jì)數(shù)
  • 現(xiàn)在看一個(gè)實(shí)際問題溪食,我們也理一理思路
  • 經(jīng)典的單詞計(jì)數(shù)問題,現(xiàn)在有一篇文章娜扇,請你寫一個(gè)Python程序來計(jì)算每一個(gè)單詞的出現(xiàn)次數(shù)(假設(shè)用aa bb來代表單詞)
aa bb aa cc dd
aa bb cc aa ee
ff gg hh 
jj ff gg
ee ss
  • 思考一下:我們用什么來存儲(chǔ)這篇文章错沃?
  • 思考一下:我們用什么存儲(chǔ)計(jì)數(shù)栅组?

list = ['aa', 'bb']
d = {'aa':0, 'bb':0}

  • 我分別用list 和 d 來存儲(chǔ)數(shù)據(jù)和計(jì)數(shù)(一個(gè)是列表,一個(gè)是字典)
  • 思路:顯然要用循環(huán)
  • 重復(fù)的事:遍歷list取每一個(gè)單詞 word
  • 在d里面把word對應(yīng)的計(jì)數(shù)+1
  • 還考慮寫一個(gè)函數(shù) 取名 wordcount
  • 輸入:list
  • 輸出: d

def wordcount(list): ( 還記得函數(shù)嗎枢析?)
????d = {}
????#..
????return d

image.png
  • 實(shí)現(xiàn)如下:

list = ['aa' , 'bb' ,'aa' ,'cc' ,'dd',
'aa' ,'bb' ,'cc', 'aa', 'ee',
'ff' ,'gg' ,'hh' ,
'jj' ,'ff', 'gg',
'ee' ,'ss']

def wordcount(list):
????d = {}
????for word in list:
????????is_in = word in d
????????if is_in == False:
???????????d[word] = 0
????????d[word] = d[word] + 1
????return d

  • 易錯(cuò)點(diǎn):一定要注意用 word in d來判斷是否存在
    試一下 在線Python

綜合運(yùn)用
北京地鐵2號線
  • 問題:請為地鐵2號線玉掸,編寫問路程序 (要求指出最優(yōu)路線)
  • 思路:先取名 環(huán)線最優(yōu)路徑算法
  • 輸入:start end 輸出 fangxiang zou_num
  • 代碼塊 定義成函數(shù):

def huanxian(start, end):
????fangxiang = ''
????zou_num = 0
????#待實(shí)現(xiàn)
????return (fangxiang,zou_num) #可以同時(shí)返回兩個(gè)變量哦~

  • 現(xiàn)在考慮用字典存儲(chǔ) 2號線環(huán)形信息。(鍵值對為 當(dāng)前站名-下一站名)
  • 比如:
    d = {
    '前門’ : '崇文門',
    '崇文門' : ‘北京站‘
    ...
    }
  • 知道了 start 和 end 能不能在字典里找到路徑醒叁?(思考一下)
  • 大概的思路:循環(huán)取字典里的值司浪,再將值作為鍵,找到下一站(也就是一站站往后循環(huán))

start = '前門'
next = start
next = d[next]
next = d[next]
試一下 在線Python

圖示

思路
image.png
  • 實(shí)現(xiàn)以下環(huán)線算法

def huanxian(start, end):
????fangxiang = ''
????zou_num = 0
????right_d = {'前門':'崇文門','崇文門’:'北京站'把沼,'北京站':'建國門','建國門’:'朝陽門'啊易,'朝陽門':'東四十條','東四十條’:'東直門','東直門':'雍和宮','雍和宮’:'安定門'饮睬,'安定門':'鼓樓大街','鼓樓大街’:'積水潭'租谈,'積水潭':'西直門','西直門’:'車公莊', '車公莊':'阜成門','阜成門':'復(fù)興門','復(fù)興門':'長椿街','長椿街':'和平門','和平門':'前門'} #右行字典
????left_d = {'崇文門':'前門','北京站':'崇文門’,'建國門':'北京站','朝陽門':'建國門’续捂,'東四十條':'朝陽門','東直門':'東四十條’垦垂,'雍和宮':'東直門','安定門':'雍和宮’,'鼓樓大街':'安定門','積水潭':'鼓樓大街’牙瓢,'西直門':'積水潭','車公莊':'西直門’, '阜成門':'車公莊','復(fù)興門':'阜成門','長椿街':'復(fù)興門','和平門':'長椿街','前門':'和平門'} #左行字典
????#環(huán)線最優(yōu)路徑算法
????next = start
????right_n = 0 #先嘗試右行
????while next != end:
????????next = right_d[next] #下一站
????????right_n = right_n +1 #走了幾站

????next = start
????left_n = 0 #嘗試左行
????while next != end:
????????next = left_d[next] #下一站
????????left_n = left_n +1 #走了幾站

????if right_n < left_n:
????????fangxiang = '右‘
???????? zou_num = right_n

????if left_n < right_n:
????????fangxiang = '左‘
???????? zou_num = left_n
????return (fangxiang, zou_num)
試一下 在線Python


  • ”當(dāng)前站回答法"

def say_dangqian():
????print("現(xiàn)在出站")

  • "問路回答法"

def huida(fangxiang, zou_num):
????#待實(shí)現(xiàn)
????a = 0
????while a < zou_num:
????????print(fangxiang+'走1站') #一定要4個(gè)空格
????????a = a + 1

  • 現(xiàn)在來寫主程序( 特別短,很好讀)

start = '?' #具體執(zhí)行時(shí)填寫
end = '?' #具體執(zhí)行時(shí)填寫
fangxiang = ''
zou_num = 0
if start == end:
????say_dangqian()
(fangxiang,zou_num) = huanxian(start_num, end_num)
huida(fangxiang, zou_num)


下一章會(huì)先復(fù)習(xí) 字典 的知識间校,不用擔(dān)心今天的新知識太多~

p6 知識點(diǎn)總結(jié):


image.png
目錄

0基礎(chǔ)教程金哥Python自學(xué)筆記P0~變量與運(yùn)算
0基礎(chǔ)教程金哥Python自學(xué)筆記P1~循環(huán)與控制

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矾克,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子憔足,更是在濱河造成了極大的恐慌胁附,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滓彰,死亡現(xiàn)場離奇詭異控妻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)揭绑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門弓候,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人他匪,你說我怎么就攤上這事菇存。” “怎么了邦蜜?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵依鸥,是天一觀的道長。 經(jīng)常有香客問我悼沈,道長贱迟,這世上最難降的妖魔是什么姐扮? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮衣吠,結(jié)果婚禮上溶握,老公的妹妹穿的比我還像新娘。我一直安慰自己蒸播,他們只是感情好睡榆,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著袍榆,像睡著了一般胀屿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上包雀,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天宿崭,我揣著相機(jī)與錄音,去河邊找鬼才写。 笑死葡兑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赞草。 我是一名探鬼主播讹堤,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼厨疙!你這毒婦竟也來了洲守?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤沾凄,失蹤者是張志新(化名)和其女友劉穎梗醇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撒蟀,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叙谨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了保屯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片手负。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖配椭,靈堂內(nèi)的尸體忽然破棺而出虫溜,到底是詐尸還是另有隱情,我是刑警寧澤股缸,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布衡楞,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瘾境。R本人自食惡果不足惜歧杏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望迷守。 院中可真熱鬧犬绒,春花似錦、人聲如沸兑凿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽礼华。三九已至咐鹤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間圣絮,已是汗流浹背祈惶。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扮匠,地道東北人捧请。 一個(gè)月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像棒搜,于是被迫代替她去往敵國和親疹蛉。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345