《笨辦法學Python》筆記29-----字典,可愛的字典

字典

字典也是python中的基礎數(shù)據(jù)類型。

提到字典你可能會想到讀書時用的新華字典,使用它你可以通過筆劃或者拼音定位到漢字,在python中把筆劃或者拼音叫做鍵,通過鍵找到的漢字稱作值,python中的字典就是由鍵值對組成的集合,這個集合中的每個鍵都是唯一的,不可重復。

dict = {key1:value1,key2:value2,...,keyn:valuen}

字典舉例

dictex = {'1':'beijing', 2:'newyork', 'shanghai':'china'}

字典中的鍵和值可以是任意類型數(shù)據(jù),字典可以任意類型關聯(lián)任意類型。

操作字典

stuff = {'name':'damao', 'age':36, 'height':175}

  • 索引

列表中,可通過從0開始的數(shù)字對列表中的元素進行索引,如list1[1],list1[-2],list1[1:5],字典通過鍵進行索引,可返回相應的值。以上例為例,stuff['name']返回‘damao’,stuff['age']返回36

  • 增加

通過對鍵值對,可以給字典增加元素,但鍵不能跟字典中的鍵重復。

stuff['weight'] = 70

stuff[1] = 'what'

stuff[2] = 'how'

  • 刪除

清空字典使用clear函數(shù),如stuff.clear()

刪除單個元素,可使用關鍵字del,如del stuff[1]

還可以使用列表中也使用的pop函數(shù)刪除字典的元素并返回,但字典中的pop函數(shù)至少有一個鍵參數(shù),并不一定是刪除最后一個元素,字典中的數(shù)據(jù)是無序的,所以并沒有第一個,最后一個的說法。

如有一個字典

stuff = {'name':'damao', 'age':36,1:'test', 2:'a', 'height':175}

stuff.pop(1)可刪除鍵值對1:‘test’并返回‘test’

stuff.pop(3,'b'),不刪除任何字典元素但返回'b'

stuff.pop(2,'f'),刪除鍵值對2:'a',并返回'a'

使用popitem函數(shù)刪除并返回字典中的某個元素,如,stuff.popitem()隨機刪除字典中的一對鍵值,并以tuple形式返回

  • 修改

可通過已知鍵索引對字典進行修改

stuff['age'] = 45 #修改年齡

教材舉例

cities = {'CA':'San Francisco', 'MI':'Detroit', 'FL':'Jacksonville'}


cities['NY'] = 'New York'

cities['OR'] = 'Portland'

def find_city(themap, state):
  if state in themap:
    return themap[state]
  else:
    return "Not Found"

cities['_find'] = find_city #關聯(lián)一個函數(shù)地址到字典中

while True:
  print "State? (Enter to quit)",
  state = raw_input("> ")
  if not state: break

  city_found = cities['_find'](cities, state)
  print city_found

字典的大度是地球人都知道的,上例中就保存了一個函數(shù)地址在字典中。

字典類型還有許多重要函數(shù),可通過查閱幫助文檔獲得。

如獲取字典中的鍵

| keys(...)
| D.keys() -> list of D's keys

獲取字典中的值

| values(...)
| D.values() -> list of D's values

獲取字典中的鍵值對

| items(...)
| D.items() -> list of D's (key, value) pairs, as 2-tuples

上例中有個隱藏的梗,那就是循環(huán)在啥情況下會退出?

if not state: break

state輸入什么值,python會認為False?

state是通過raw_input函數(shù)獲得值的,查看raw_input幫助


raw_input(...)
    raw_input([prompt]) -> string

    Read a string from standard input.  The trailing newline is stripped.
    If the user hits EOF (Unix: Ctl-D, Windows: Ctl-Z+Return), raise EOFError.
    On Unix, GNU readline is used if enabled.  The prompt string, if given,
    is printed without a trailing newline before reading.

1.raw_input函數(shù)的返回值是字符串

2.用戶觸發(fā)EOF,拋出EOFError異常

EOF是什么鬼?

EOF,全稱END OF FILE,表示"文字流"(stream)的結(jié)尾。這里的"文字流",可以是文件(file),也可以是標準輸入.

關于EOF有很多資料,這里截取一段

Linux中,在新的一行的開頭,按下Ctrl-D,就代表EOF(如果在一行的中間按下Ctrl-D,則表示輸出"標準輸入"的緩存區(qū),所以這時必須按兩次Ctrl-D);Windows中,Ctrl-Z表示EOF。(順便提一句,Linux中按下Ctrl-Z,表示將該進程中斷,在后臺掛起,用fg命令可以重新切回到前臺;按下Ctrl-C表示終止該進程。)

EOF@維基百科

EOF@阮一峰的網(wǎng)絡日志

這里還有一個梗,為什么按回車鍵即正常退出,而不拋出EOF異?;蚱渌魏萎惓????

為教材的舉例增加一些調(diào)試代碼

#coding:utf-8
cities = {'CA':'San Francisco', 'MI':'Detroit', 'FL':'Jacksonville'}


cities['NY'] = 'New York'

cities['OR'] = 'Portland'

def find_city(themap, state):
  if state in themap:
    return themap[state]
  else:
    return "Not Found"

cities['_find'] = find_city #關聯(lián)一個函數(shù)地址到字典中

while True:
  print "State? (Enter to quit)",
  state = raw_input("> ")
  print state              #打印輸入的字符串
  print len(state)         #計算輸入字符串長度
  print bool(state)        #判斷輸入的真值True or False

  if not state: break

  city_found = cities['_find'](cities, state)
  print city_found


增加了按下回車鍵時,輸出一些輔助信息

從下面的鏈接中得知,linux系統(tǒng)中按下回車鍵相當于輸入了'\n'實現(xiàn)回車換行操作。

而raw_input函數(shù)讀入標準輸入時是抹掉換行符的,所以按下回車鍵被刪掉換行符后,raw_input的返回為空

執(zhí)行程序,按下回車鍵,看打印信息

damao@damao:~/Desktop$ python t.py
State? (Enter to quit) >

0
False
damao@damao:~/Desktop$

可以看到字符串長度為0,真值測試為假

上述輸出的換行效果是print函數(shù)產(chǎn)生的,若去掉打印代碼,直接按下回車鍵后,輸出信息

damao@damao:~/Desktop$ python t.py
State? (Enter to quit) >
damao@damao:~/Desktop$

因此,按下回車鍵時沒有拋出異常。

關于回車換行

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • php usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進制字符串對數(shù)據(jù)進行解包。 uni...
    思夢PHP閱讀 2,135評論 1 24
  • PHP常用函數(shù)大全 usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進制字符串對數(shù)據(jù)進行解...
    上街買菜丶迷倒老太閱讀 1,501評論 0 20
  • Python簡介 Python歷史 Python 是由 Guido van Rossum 在八十年代末和九十年代初...
    莫名其妙的一生閱讀 1,139評論 0 2
  • 孤獨的靈魂拜倒在江南春天里 美的令人窒息 煩躁的心??吭诓歼_拉宮 空靈的無法比擬 浮夸的社會,繁華的街 找不到合適...
    二兩酒仙閱讀 414評論 13 36
  • 早上六點,清晨的第一縷陽光已經(jīng)照進這座城市,試圖叫醒那些還在熟睡的人。麗君像往常一樣,已經(jīng)起床洗漱完畢,開始...
    愛吹牛的實話家閱讀 1,439評論 4 11

友情鏈接更多精彩內(nèi)容