Python中的字典

一侣滩、字典介紹

想一想:
如果有列表
nameList = ['xiaoZhang', 'xiaoWang', 'xiaoLi'];

  • 需要對(duì)"xiaoWang"這個(gè)名字寫錯(cuò)了琼梆,通過(guò)代碼修改:
    nameList[1] = 'xiaoxiaoWang'
  • 如果列表的順序發(fā)生了變化款违,如下
    nameList = ['xiaoWang', 'xiaoZhang', 'xiaoLi'];
  • 此時(shí)就需要修改下標(biāo),才能完成名字的修改
    nameList[0] = 'xiaoxiaoWang'
  • 有沒(méi)有方法,既能存儲(chǔ)多個(gè)數(shù)據(jù)蟆炊,還能在訪問(wèn)元素的很方便就能夠定位到需要的那個(gè)元素呢阿趁?
    答:
    字典

另一個(gè)場(chǎng)景:

  • 學(xué)生信息列表膜蛔,每個(gè)學(xué)生信息包括學(xué)號(hào)、姓名歌焦、年齡等飞几,如何從中找到某個(gè)學(xué)生的信息?
    studens = [[1001, "王寶強(qiáng)", 24], [1002, "馬蓉", 23], [1005, "宋喆"独撇,24], ...]
  • 循環(huán)遍歷屑墨? No!
  • 生活中的字典
生活中的字典1.png

生活中的字典2.png
  • 軟件開發(fā)中的字典
  • 變量info為字典類型:
    info = {'name':'班長(zhǎng)', 'id':100, 'sex':'f', 'address':'地球亞洲中國(guó)北京'}
  • 說(shuō)明:
    • 字典和列表一樣纷铣,也能夠存儲(chǔ)多個(gè)數(shù)據(jù)
    • 列表中找某個(gè)元素時(shí)卵史,是根據(jù)下標(biāo)進(jìn)行的
    • 字典中找某個(gè)元素時(shí),是根據(jù)'名字'(就是冒號(hào):前面的那個(gè)值搜立,例如上面代碼中的'name'以躯、'id'、'sex')
    • 字典的每個(gè)元素由2部分組成啄踊,鍵:值忧设。例如 'name':'班長(zhǎng)' ,'name'為鍵,'班長(zhǎng)'為值
  • 根據(jù)鍵訪問(wèn)值
info = {'name':'班長(zhǎng)', 'id':100, 'sex':'f', 'address':'地球亞洲中國(guó)北京'}

print(info['name'])
print(info['address'])
  • 結(jié)果:


    結(jié)果.png
  • 若訪問(wèn)不存在的鍵颠通,則會(huì)報(bào)錯(cuò):
info = {'name':'班長(zhǎng)', 'id':100, 'sex':'f', 'address':'地球亞洲中國(guó)北京'}

print(info['age'])
結(jié)果.png
  • 在我們不確定字典中是否存在某個(gè)鍵而又想獲取其值時(shí)址晕,可以使用get方法,還可以設(shè)置默認(rèn)值:
info = {'name':'班長(zhǎng)', 'id':100, 'sex':'f', 'address':'地球亞洲中國(guó)北京'}
age = info.get('age')
age #'age'鍵不存在顿锰,所以age為None
print(type(age))
age = info.get('age', 18) # 若info中不存在'age'這個(gè)鍵谨垃,就返回默認(rèn)值18
print(age)
結(jié)果.png
二启搂、字典的常見(jiàn)操作1
  • 修改元素

字典的每個(gè)元素中的數(shù)據(jù)是可以修改的,只要通過(guò)key找到刘陶,即可修改

  • demo:
info = {'name':'班長(zhǎng)', 'id':100, 'sex':'f', 'address':'地球亞洲中國(guó)北京'}
print('修改之前的id為%d:'%info['id'])
print('-'*20)
newId = input('請(qǐng)輸入新的學(xué)號(hào)')

info['id'] = int(newId)

print('修改之后的id為%d:'%info['id'])
  • 結(jié)果:


    結(jié)果.png
  • 添加元素

如果在使用 變量名['鍵'] = 數(shù)據(jù) 時(shí)胳赌,這個(gè)“鍵”在字典中,不存在匙隔,那么就會(huì)新增這個(gè)元素

  • demo:
info = {'name':'班長(zhǎng)','sex':'f', 'address':'地球亞洲中國(guó)北京'}
# print('修改之前的id為%d:'%info['id'])  //訪問(wèn)不存在的鍵會(huì)報(bào)錯(cuò)疑苫,前面已經(jīng)演示過(guò)了
print(info)
print('-'*70)
newId = input('請(qǐng)輸入新的學(xué)號(hào):')

info['id'] = int(newId)
print('-'*20)
print('添加之后的id為%d'%info['id'])
print(info)
print('-'*70)
  • 結(jié)果:


    結(jié)果.png
  • 刪除元素

對(duì)字典進(jìn)行刪除操作,有一下幾種:

  • del
  • clear()
  • demo:del刪除指定的元素
info = {'name':'班長(zhǎng)','sex':'f', 'address':'地球亞洲中國(guó)北京'}

print(info)
print('-'*70)

del info['name']

print(info)
print('-'*70)
  • 結(jié)果:


    結(jié)果.png
  • demo:del刪除整個(gè)字典
info = {'name':'班長(zhǎng)','sex':'f', 'address':'地球亞洲中國(guó)北京'}

print(info)
print('-'*70)

del info

print(info)
print('-'*70)
  • 結(jié)果:


    結(jié)果.png
  • demo:clear清空整個(gè)字典
info = {'name':'班長(zhǎng)','sex':'f', 'address':'地球亞洲中國(guó)北京'}

print(info)
print('-'*70)

info.clear()

print(info)
print('-'*70)
  • 結(jié)果:


    結(jié)果.png
三牡直、字典的常見(jiàn)操作2
  • len()

測(cè)量字典中缀匕,鍵值對(duì)的個(gè)數(shù)

  • demo:
dict = {'name':'趙四','sex':'男'}
print("字典的長(zhǎng)度:",len(dict))
  • 結(jié)果:


    結(jié)果.png
  • keys

返回一個(gè)包含字典所有KEY的列表

  • demo:
dict = {'name':'趙四','sex':'男'}
print("字典的所有KEY的列表:",dict.keys())
  • 結(jié)果:


    結(jié)果.png
  • values

返回一個(gè)包含字典所有value的列表

  • demo:
dict = {'name':'趙四','sex':'男'}
print("字典的所有value的列表:",dict.values())
  • 結(jié)果:


    結(jié)果.png
  • items

返回一個(gè)包含所有(鍵,值)元祖的列表

  • demo:
dict = {'name':'趙四','sex':'男'}
print("字典的所有(鍵碰逸,值)元祖的列表:",dict.items())
  • 結(jié)果:


    結(jié)果.png
  • has_key(Python3中已經(jīng)刪除)

dict.has_key(key)如果key在字典中乡小,返回True,否則返回False

  • demo:
dict = {'name':'趙四','sex':'男'}
print(dict.has_key('name'))
  • 結(jié)果:


    結(jié)果.png
四饵史、字典的遍歷
  • 遍歷

通過(guò)for ... in ...:的語(yǔ)法結(jié)構(gòu)满钟,我們可以遍歷字符串、列表胳喷、元組湃番、字典等數(shù)據(jù)結(jié)構(gòu)。
注意python語(yǔ)法的縮進(jìn)

  • 遍歷字典的key(鍵)
  • demo:
dict = {'name':'趙四','sex':'男','age':23}
print(dict)
print('-'*40)
for key in dict.keys():
   print(key)
  • 結(jié)果:


    結(jié)果.png
  • 遍歷字典的value(值)
  • demo:
dict = {'name':'趙四','sex':'男','age':23}
print(dict)
print('-'*40)
for value in dict.values():
   print(value)
  • 結(jié)果:


    結(jié)果.png
  • 遍歷字典的項(xiàng)(元素)
  • demo:
dict = {'name':'趙四','sex':'男','age':23}
print(dict)
print('-'*40)
for item in dict.items():
   print(item)
  • 結(jié)果:


    結(jié)果.png
  • 遍歷字典的key-value(鍵值對(duì))
  • demo:
dict = {'name':'趙四','sex':'男','age':23}
print(dict)
print('-'*40)
for key,value in dict.items():
   print("key= %s,value= %s"%(key,value))
  • 結(jié)果:


    結(jié)果.png
  • 想一想吭露,如何實(shí)現(xiàn)帶下標(biāo)索引的遍歷
chars = ['a', 'b', 'c', 'd']
i = 0
for chr in chars:
   print("%d %s"%(i, chr))
   i += 1
  • 結(jié)果:


    結(jié)果.png
  • enumerate()
  • demo:
chars = ['a', 'b', 'c', 'd']
for i, chr in enumerate(chars):
   print("%d %s"%(i, chr))
  • 結(jié)果:


    結(jié)果.png
五吠撮、公共方法
  • 運(yùn)算符

運(yùn)算符.png

注意,in在對(duì)字典操作時(shí)讲竿,判斷的是字典的鍵

  • python內(nèi)置函數(shù)

Python包含了以下內(nèi)置函數(shù)


函數(shù).png
  • 注意:
    cmp在比較字典數(shù)據(jù)時(shí)泥兰,先比較鍵,再比較值题禀。
    del有兩種用法鞋诗,一種是del加空格,另一種是del()
  • 多維列表/元祖訪問(wèn)的示例
  • deno:
tuple = [(2,3),(4,5)]
print(tuple)
print('-'*20)
print(tuple[0])
print('-'*20)
print(tuple[0][0])
  • 結(jié)果:


    結(jié)果.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末迈嘹,一起剝皮案震驚了整個(gè)濱河市削彬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秀仲,老刑警劉巖融痛,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異神僵,居然都是意外死亡雁刷,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門挑豌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)安券,“玉大人,你說(shuō)我怎么就攤上這事侯勉。” “怎么了铝阐?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵址貌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我徘键,道長(zhǎng)练对,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任吹害,我火速辦了婚禮螟凭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘它呀。我一直安慰自己螺男,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布纵穿。 她就那樣靜靜地躺著下隧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谓媒。 梳的紋絲不亂的頭發(fā)上淆院,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音句惯,去河邊找鬼土辩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宗弯,可吹牛的內(nèi)容都是我干的脯燃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼蒙保,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辕棚!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起邓厕,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤逝嚎,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后详恼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體补君,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年昧互,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挽铁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伟桅。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖叽掘,靈堂內(nèi)的尸體忽然破棺而出楣铁,到底是詐尸還是另有隱情,我是刑警寧澤更扁,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布盖腕,位于F島的核電站,受9級(jí)特大地震影響浓镜,放射性物質(zhì)發(fā)生泄漏溃列。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一膛薛、第九天 我趴在偏房一處隱蔽的房頂上張望听隐。 院中可真熱鬧,春花似錦相叁、人聲如沸遵绰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)椿访。三九已至,卻和暖如春虑润,著一層夾襖步出監(jiān)牢的瞬間成玫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工拳喻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哭当,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓冗澈,卻偏偏與公主長(zhǎng)得像钦勘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亚亲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容