一侣滩、字典介紹
想一想:
如果有列表
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!
- 生活中的字典
- 軟件開發(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é)果:
- 若訪問(wèn)不存在的鍵颠通,則會(huì)報(bào)錯(cuò):
info = {'name':'班長(zhǎng)', 'id':100, 'sex':'f', 'address':'地球亞洲中國(guó)北京'} print(info['age'])
- 在我們不確定字典中是否存在某個(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à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é)果:
- 添加元素
如果在使用 變量名['鍵'] = 數(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é)果:
- 刪除元素
對(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é)果:
- demo:del刪除整個(gè)字典
info = {'name':'班長(zhǎng)','sex':'f', 'address':'地球亞洲中國(guó)北京'} print(info) print('-'*70) del info print(info) print('-'*70)
結(jié)果:
- demo:clear清空整個(gè)字典
info = {'name':'班長(zhǎng)','sex':'f', 'address':'地球亞洲中國(guó)北京'} print(info) print('-'*70) info.clear() print(info) print('-'*70)
結(jié)果:
三牡直、字典的常見(jiàn)操作2
- len()
測(cè)量字典中缀匕,鍵值對(duì)的個(gè)數(shù)
- demo:
dict = {'name':'趙四','sex':'男'} print("字典的長(zhǎng)度:",len(dict))
結(jié)果:
- keys
返回一個(gè)包含字典所有KEY的列表
- demo:
dict = {'name':'趙四','sex':'男'} print("字典的所有KEY的列表:",dict.keys())
結(jié)果:
- values
返回一個(gè)包含字典所有value的列表
- demo:
dict = {'name':'趙四','sex':'男'} print("字典的所有value的列表:",dict.values())
結(jié)果:
- items
返回一個(gè)包含所有(鍵,值)元祖的列表
- demo:
dict = {'name':'趙四','sex':'男'} print("字典的所有(鍵碰逸,值)元祖的列表:",dict.items())
結(jié)果:
- has_key(Python3中已經(jīng)刪除)
dict.has_key(key)如果key在字典中乡小,返回True,否則返回False
- demo:
dict = {'name':'趙四','sex':'男'} print(dict.has_key('name'))
結(jié)果:
四饵史、字典的遍歷
- 遍歷
通過(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é)果:
- 遍歷字典的value(值)
- demo:
dict = {'name':'趙四','sex':'男','age':23} print(dict) print('-'*40) for value in dict.values(): print(value)
結(jié)果:
- 遍歷字典的項(xiàng)(元素)
- demo:
dict = {'name':'趙四','sex':'男','age':23} print(dict) print('-'*40) for item in dict.items(): print(item)
結(jié)果:
- 遍歷字典的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é)果:
- 想一想吭露,如何實(shí)現(xiàn)帶下標(biāo)索引的遍歷
chars = ['a', 'b', 'c', 'd'] i = 0 for chr in chars: print("%d %s"%(i, chr)) i += 1
結(jié)果:
- enumerate()
- demo:
chars = ['a', 'b', 'c', 'd'] for i, chr in enumerate(chars): print("%d %s"%(i, chr))
結(jié)果:
五吠撮、公共方法
- 運(yùn)算符
注意,in在對(duì)字典操作時(shí)讲竿,判斷的是字典的鍵
- python內(nèi)置函數(shù)
Python包含了以下內(nèi)置函數(shù)
- 注意:
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é)果: