版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Python程序設(shè)計實(shí)用教程xxx第5章字典與集合本章要點(diǎn)字典的創(chuàng)建與訪問字典的方法字典的遍歷集合的創(chuàng)建與訪問集合的基本操作集合的運(yùn)算5.1字典Python字典可以保存具有映射關(guān)系的數(shù)據(jù),所以字典相當(dāng)于保存了兩組數(shù)據(jù),其中一組數(shù)據(jù)是關(guān)鍵數(shù)據(jù),被稱為key;另一組數(shù)據(jù)可通過key來訪問,被稱為value。
由于字典中的key是非常關(guān)鍵的數(shù)據(jù),而且程序需要通過key來訪問value,因此字典中的key不允許重復(fù),value是允許重復(fù)的。5.1.1字典的創(chuàng)建與刪除1.字典的創(chuàng)建一個空字典的聲明,用花括號{}創(chuàng)建一個字典。>>>dict1={}>>>print(type(dict1))<class'dict'>
有映射關(guān)系的字典聲明方式,字典的每個鍵值對(key:value)用冒號“:”分割,每個鍵值對之間用逗號“,”分割,整個字典包括在花括號{}中。
字典中的鍵key是不允許重復(fù)的,如果里面有重復(fù)的,后面的默認(rèn)覆蓋前面的,如下程序。>>>dict1={'小李':,'小張':,'小李':}>>>print(dict1){'小李':,'小張':}
上面程序中,key值“小李”有兩個,后面的覆蓋前面一個值,但是如果值有重復(fù)的是沒有關(guān)系的。
需要指出的是,元組可以作為字典的key,但列表不能作為字典的key。這是由于dict要求key必須是不可變類型,但列表是可變類型,因此列表不能作為字典的key。
在使用dict()函數(shù)創(chuàng)建字典時,可以傳入多個列表或元組參數(shù)作為key-value對,每個列表或元組將被當(dāng)成一個key-value對,因此這些列表或元組都只能包含兩個元素。例如代碼:>>>htables=[('李明',158),('王強(qiáng)',179),('張?zhí)?,185)]#創(chuàng)建包含3組key-value對的字典>>>dict3=dict(htables)>>>print(dict3){'李明':158,'王強(qiáng)':179,'張?zhí)?:185}
還可通過為
dict指定關(guān)鍵字參數(shù)創(chuàng)建字典,此時字典的key不允許使用表達(dá)式。如下代碼:#使用關(guān)鍵字參數(shù)來創(chuàng)建字典>>>dict6=dict(weight=70,high=179)>>>print(dict6){'weight':70,'high':179}
上面代碼在創(chuàng)建字典時,其key直接寫weight、high,不需要將它們放在引號中。2.字典的刪除
同列表和元組一樣,使用del命令刪除字典。通過下面的代碼即可將已經(jīng)定義的字典刪除。>>>deldictionary
另外,如果只是想刪除字典的全部元素,可以使用字典對象的clear()方法。執(zhí)行clear()方法后,原字典將變?yōu)榭兆值洹@?,下面的代碼將清除字典的全部元素。>>>dictionary.clear()
還可以使用字典對象的pop()刪除并返回指定“鍵”的元素,以及使用字典對象的popitem()方法刪除并返回字典中的一個元素。>>>smart_girl={"name":"yuanwai","age":25,"address":"Beijing"}>>>smart_girl.pop("name")'yuanwai'字典的pop()方法刪除字典的key對應(yīng)的值。>>>smart_girl.popitem()#返回被刪除的Entry('address','Beijing')
字典的popitem()方法,返回刪除字典的一項,當(dāng)字典為空時,返回錯誤信息:KeyError:'popitem():dictionaryisempty'。5.1.2字典元素的訪問
字典中的元素不能通過索引來訪問,只能是通過鍵來查找對應(yīng)的值,有兩種不同的訪問方法。1.dictname[key],其中dictname代表字典的名稱,key代表指定的鍵。如果指定的鍵不存在,將報告KeyError的錯誤。2.dictname.get(key),其中dictname表示字典的名稱,key表示指定的鍵。如果指定的鍵不存在,將返回None?!纠?.1】Python訪問字典實(shí)例。>>>dict_demo={'name':'張三','age':20,'height':185}>>>print(dict_demo['name'])張三>>>print(dict_demo.get('name'))張三>>>print('鍵值不存在的情況返回結(jié)果=',dict_demo.get('test'))鍵值不存在的情況返回結(jié)果=None>>>print('鍵值不存在的情況返回結(jié)果=',dict_demo['test'])KeyError:'test'
程序中,通過key訪問value的值,如果key不存在,則返回keyError錯誤信息。如果采用get()方法,返回None。
字典包含多個key-value對,而key是字典的關(guān)鍵數(shù)據(jù),因此程序?qū)ψ值涞牟僮鞫际腔趉ey的。字典有如下的基本操作:(1)通過
key訪問value。(2)通過
key添加key-value對。(3)通過
key刪除key-value對。(4)通過
key修改key-value對。(5)通過
key判斷指定key-value對是否存在。
通過key訪問value使用的也是方括號語法?!纠?.2】如下代碼示范了通過key訪問value。#通過key訪問value>>>scores={'語文':89}>>>print(scores['語文'])89如果要為dict添加key-value對,只需為不存在的key賦值即可:#對不存在的key賦值,就是增加key-value對>>>scores['數(shù)學(xué)']=93>>>scores['英語']=97>>>print(scores){'語文':89,'數(shù)學(xué)':93,'英語':97}
如果要刪除宇典中的key-value對,則可使用del語句。#使用del語句刪除key-value對>>>delscores['語文']>>>delscores['數(shù)學(xué)']>>>print(scores){'英語':97}
如果對dict中存在的key-value對賦值,新賦的value就會覆蓋原有的value,這樣即可改變dict中的key-value對。#對存在的key-value對賦值,改變key-value對>>>cars={'BMW':8.5,'BENS':8.3,'AUDI':7.9}>>>cars['BENS']=4.3>>>cars['AUDI']=3.8>>>print(cars){'BMW':8.5,'BENS':4.3,'AUDI':3.8}
如果要判斷字典是否包含指定的key,則可以使用
in或notin運(yùn)算符。需要指出的是,對于dict而言,in或notin運(yùn)算符都是基于key來判斷的。#判斷cars是否包含名為'AUDI'的key>>>print('AUDI'incars)True#判斷cars是否包含名為'PORSCHE'的key>>>print('PORSCHE'incars)False>>>print('LAMBORGHINI'notincars)True
字典的key是它的關(guān)鍵。換個角度來看,字典的key就相當(dāng)于它的索引,只不過這些索引不一定是整數(shù)類型,字典的key可以是任意不可變類型。字典相當(dāng)于索引是任意不可變類型的列表,而列表則相當(dāng)于key只能是整數(shù)的字典。因此,如果程序中要使用的字典的key都是整數(shù)類型,則可考慮能否換成列表。5.1.3字典的操作函數(shù)下面介紹dict的一些常用方法。1.clear()方法clear()方法用于清空字典中所有的key-value對,對一個字典執(zhí)行clear()方法之后,該字典就會變成一個空字典。例如代碼:>>>cars={'BMW':8.5,'BENS':8.3,'AUDI':7.9}>>>print(cars){'BMW':8.5,'BENS':8.3,'AUDI':7.9}#清空cars所有key-value對>>>cars.clear()>>>print(cars)#{}{}2.get()方法get()方法就是根據(jù)key來獲取value,它相當(dāng)于方括號語法的增強(qiáng)版,當(dāng)使用方括號語法訪問并不存在的key時,字典會引發(fā)KeyError錯誤。但如果使用get()方法訪問不存在的key,該方法會返回
None,不會導(dǎo)致錯誤?!纠?.3】字典的get()方法使用案例。>>>cars={'BMW':8.5,'BENS':8.3,'AUDI':7.9}#獲取'BMW'對應(yīng)的value>>>print(cars.get('BMW'))#8.58.5>>>print(cars.get('PORSCHE'))#NoneNone>>>print(cars['PORSCHE'])#KeyErrorTraceback(mostrecentcalllast):File"<pyshell#68>",line1,in<module>print(cars['PORSCHE'])#KeyErrorKeyError:'PORSCHE'3.update()方法update()方法可使用一個字典所包含的key-value對來更新己有的字典。在執(zhí)行update()方法時,如果被更新的字典中已包含對應(yīng)的key-value對,那么原value會被覆蓋。如果被更新的字典中不包含對應(yīng)的key-value對,則該key-value對被添加進(jìn)去。【例5.4】字典的update()方法應(yīng)用示例。>>>cars={'BMW':8.5,'BENS':8.3,'AUDI':7.9}>>>cars.update({'BMW':4.5,'PORSCHE':9.3})>>>print(cars){'BMW':4.5,'BENS':8.3,'AUDI':7.9,'PORSCHE':9.3}items()、keys()、values()分別用于獲取字典中的所有key-value對、所有key、所有value。這三個方法依次返回dict_items、dict_keys和dict_values對象,Python不希望用戶直接操作這幾個方法,但可通過list()函數(shù)把它們轉(zhuǎn)換成列表?!纠?.5】items()、keys()、values()三個方法的使用示例。>>>cars={'BMW':8.5,'BENS':8.3,'AUDI':7.9}#獲取字典所有的key-value對,返回一個dict_items對象>>>ims=cars.items()>>>print(type(ims))#<class'dict_items'>#將dict_items轉(zhuǎn)換成列表>>>print(list(ims))#[('BMW',8.5),('BENS',8.3),('AUDI',7.9)][('BMW',8.5),('BENS',8.3),('AUDI',7.9)]#訪問第2個key-value對>>>print(list(ims)[1])#('BENS',8.3)#獲取字典所有的key,返回一個dict_keys對象>>>kys=cars.keys()>>>print(type(kys))#<class'dict_keys'>#將dict_keys轉(zhuǎn)換成列表>>>print(list(kys))#['BMW','BENS','AUDI']['BMW','BENS','AUDI']4.pop方法pop()方法用于獲取指定key對應(yīng)的value,并刪除這個key-value對?!纠?.6】pop()方法的用法示例。>>>cars={'BMW':8.5,'BENS':8.3,'AUDI':7.9}>>>print(cars.pop('AUDI'))#7.97.9>>>print(cars){'BMW':8.5,'BENS':8.3}
此程序中,第2行代碼獲取“AUDI”對應(yīng)的value,并刪除該key-value對。
5.popitem()方法popitem()方法用于隨機(jī)彈出字典中的一個key-value對。此處的隨機(jī)其實(shí)不是真實(shí)的隨機(jī),正如列表的pop()方法總是彈出列表中最后一個元素,實(shí)際上字典的popitem()其實(shí)也是彈出字典中最后一個key-value對。由于字典存儲key-value對的順序是不可知的,因此開發(fā)者感覺字典的popitem()方法是“隨機(jī)”彈出的,但實(shí)際上字典的popitem()方法總是彈出底層存儲的最后一個key-value對?!纠?.7】popitem()方法的用法示例。>>>cars={'AUDI':7.9,'BENS':8.3,'BMW':8.5}>>>print(cars){'AUDI':7.9,'BENS':8.3,'BMW':8.5}#彈出字典底層存儲的最后一個key-value對>>>print(cars.popitem())('BMW',8.5)>>>print(cars){'AUDI':7.9,'BENS':8.3}6.setdefault()方法setdefault()方法用于根據(jù)key來獲取對應(yīng)value的值。但該方法有一個額外的功能,即當(dāng)程序要獲取的key在字典中不存在時,該方法會先為這個不存在的key設(shè)置一個默認(rèn)的value,再返回該key對應(yīng)的value。setdefault()方法總能返回指定key對應(yīng)的value?!纠?.8】setdefault()方法的用法示例。>>>cars={'BMW':8.5,'BENS':8.3,'AUDI':7.9}#設(shè)置默認(rèn)值,該key在dict中不存在,新增key-value對>>>print(cars.setdefault('PORSCHE',9.2))#9.2>>>print(cars){'BMW':8.5,'BENS':8.3,'AUDI':7.9,'PORSCHE':9.2}#設(shè)置默認(rèn)值,該key在dict中存在,不會修改dict內(nèi)容>>>print(cars.setdefault('BMW',3.4))8.5>>>print(cars){'BMW':8.5,'BENS':8.3,'AUDI':7.9,'PORSCHE':9.2}7.fromkeys()方法fromkeys()方法使用給定的多個key創(chuàng)建字典,這些key對應(yīng)的value默認(rèn)都是None;也可以額外傳入一個參數(shù)作為默認(rèn)的value?!纠?.9】fromkeys()方法使用示例。#使用列表創(chuàng)建包含2個key的字典>>>a_dict=dict.fromkeys(['a','b'])>>>print(a_dict){'a':None,'b':None}#使用元組創(chuàng)建包含2個key的字典>>>b_dict=dict.fromkeys((13,17))>>>print(b_dict){13:None,17:None}#使用元組創(chuàng)建包含2個key的字典,指定默認(rèn)的value>>>c_dict=dict.fromkeys((13,17),'good')>>>print(c_dict){13:'good',17:'good'}5.1.4字典的遍歷1.遍歷key的值>>>scores_dict={'語文':105,'數(shù)學(xué)':130,'英語':116}>>>forkeyinscores_dict:print(key)語文數(shù)學(xué)英語2遍歷value的值
>>>scores_dict={'語文':105,'數(shù)學(xué)':130,'英語':116}>>>forvalueinscores_dict.values():print(value)3.遍歷字典鍵值對
>>>scores_dict={'語文':105,'數(shù)學(xué)':130,'英語':116}>>>fork,vinscores_dict.items():print('科目:',k,'成績:',v)5.2集合
在Python中,用set來表示一個無序不重復(fù)元素的序列??梢允褂么罄ㄌ杮}或者set()函數(shù)創(chuàng)建集合。注意如果創(chuàng)建一個空集合必須用set()而不是{},{}是用來表示空字典類型的。5.2.1集合的創(chuàng)建與使用1.用{}創(chuàng)建集合
集合元素可以是各種不可變類型的數(shù)據(jù),可以賦值重復(fù)數(shù)據(jù),但是集合會去除重復(fù)的元素。>>>person={"student","teacher","babe",23,21,23}>>>print(len(person))5存放了6個數(shù)據(jù),長度顯示是5,去除重復(fù)元素。顯示出來則是去重的。>>>print(person){'teacher','student',21,'babe',23}2.空集合用set()函數(shù)表示
表示空用set(),不能用{}。>>>person1=set()>>>print(len(person1))0>>>print(person1)set()3.用set()函數(shù)創(chuàng)建集合
用set()函數(shù)只能傳入一個參數(shù),可以是list,tuple等類型。>>>person2=set(("hello","張三",33,11,33,"李明"))>>>print(len(person2))5>>>print(person2){33,'hello',11,'張三','李明'}集合中不能包含字典和列表這樣的可變類型元素。>>>set10={'name',19,[1,2,3,2]}TypeError:unhashabletype:'list'5.2.2集合的運(yùn)算
集合支持?jǐn)?shù)學(xué)意義上的交集、并集、差集、補(bǔ)集等運(yùn)算,如表所示。操作符描述S&T交集,返回一個新集合,包括同時在集合S和T中的元素。S|T并集,返回一個新集合,包括集合S和T中的所有元素。S-T差集,返回一個新集合,包括在集合S中但不在集合T中的元素。S^T補(bǔ)集,返回一個新集合,包括集合S和T中的元素,但不包括同時在集合S和T中的元素。S<=T如果S與T相同或S是T的子集,返回True,否則返回False,可以用S<T判斷S是否是T的真子集。S>=T如果S與T相同或S是T的超集,,返回True,否則返回False,可以用S>T判斷S是否是T的真超集。
【例5.11】集合的運(yùn)算。>>>a_set={1,2,3,4,5}>>>b_set={1,2,6,7,9,8}>>>print('交集:',a_set&b_set)#交集交集:{1,2}>>>print('并集:',a_set|b_set)#并集并集:{1,2,3,4,5,6,7,8,9}>>>print('差集:',a_set-b_set)#差集差集:{3,4,5}>>>print('補(bǔ)集:',a_set^b_set)#補(bǔ)集補(bǔ)集:{3,4,5,6,7,8,9}【例5.12】子集運(yùn)算。>>>a={1,2,3}>>>b={2,3}>>>c={1,2,4}>>>print('b是否為a的子集:',a>=b)b是否為a的子集:True>>>print('a是否為c的子集:',a<=c)a是否為c的子集:False5.2.3集合的基本操作Python提供了眾多內(nèi)置操作集合的方法,用于向集合中添加元素、刪除元素或復(fù)制集合等,常用的方法如表5.2所示,其中,S、T為集合,x為集合中的元素。方法功能描述S.add(x)添加元素,如果元素x不在集合S中,將x增加到S。S.clear()清除元素。移除S中的所有元素。S.copy()復(fù)制集合。返回集合S的一個副本。S.pop()隨機(jī)彈出集合S中的一個元素,并在集合中刪除該元素。S為空時產(chǎn)生KeyError異常。S.discard(x)如果x在集合S中,移除該元素;x不存在時,不報異常。S.remove(x)如果x在集合S中,移除該元素;x不存在時,會產(chǎn)生KeyError異常。S.isdisjoint(x)判斷集合中是否存在相同元素。如果S與x中有相同元素,則返回False;如果S與x中沒有相同元素則返回True。【例5.13】集合的基本操作方法。>>>s={1,2,3,4}>>>s.add(5)#集合中添
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 船舶服務(wù)員考試題及答案
- 樂山市衛(wèi)生健康委員會2025年下半年公開選調(diào)事業(yè)單位工作人員備考題庫附答案
- 北京師大附中金鵬科技團(tuán)專職教師招聘備考題庫必考題
- 南昌市勞動保障事務(wù)代理中心招聘4名項目外包服務(wù)人員參考題庫必考題
- 廣安市廣安區(qū)石筍鎮(zhèn)人民政府關(guān)于2025年選用片區(qū)紀(jì)檢監(jiān)督員的備考題庫附答案
- 招23人!高中可報、2025年茫崖市公安局面向社會公開招聘警務(wù)輔助人員備考題庫必考題
- 江投國華信豐發(fā)電有限責(zé)任公司公開招聘勞務(wù)派遣制工作人員 備考題庫必考題
- 輔警78名!2025年海南州公安局面向社會公開招聘警務(wù)輔助人員參考題庫附答案
- 雅安中學(xué)2025年公開選調(diào)事業(yè)人員的考試備考題庫附答案
- 安全生產(chǎn)執(zhí)法提示講解
- 《風(fēng)力發(fā)電廠調(diào)試規(guī)程》
- 搞笑小品劇本《我的健康誰做主》臺詞完整版-宋小寶徐崢
- 正大天虹方矩管鍍鋅方矩管材質(zhì)書
- 兔子解剖實(shí)驗報告
- 雙減背景下家校共育的問題及策略
- 建設(shè)工程第三方質(zhì)量安全巡查標(biāo)準(zhǔn)
- 管理養(yǎng)老機(jī)構(gòu) 養(yǎng)老機(jī)構(gòu)的服務(wù)提供與管理
- 乳化液處理操作規(guī)程
- 飯店轉(zhuǎn)讓協(xié)議合同
- 營建的文明:中國傳統(tǒng)文化與傳統(tǒng)建筑(修訂版)
- 液化天然氣氣化站安全檢查表
評論
0/150
提交評論