Python學(xué)習(xí)之字典和集合的使用詳解
字典簡(jiǎn)介
Python 中字典和集合也是非常相近的概念,而且從外觀看上去,也有那么一絲絲的相似,Python 語(yǔ)言中字典類型是非常靈活的,在實(shí)戰(zhàn)中的使用場(chǎng)景非常多,后續(xù)項(xiàng)目課中會(huì)反復(fù)涉及。
本篇博會(huì)從字典基本知識(shí)入手,為你展開字典類型數(shù)據(jù)的各個(gè)知識(shí)點(diǎn)。
首先我們看一下定義:
字典,是可變的無序集合(在 Python 最新版本中,已經(jīng)變?yōu)橛行颍?,它是一種以鍵值對(duì)為基本元素,可以存放各種數(shù)據(jù)類型的容器,用大括號(hào)({}
)表示字典的開始和結(jié)束,元素之間用逗號(hào)(,
)進(jìn)行分隔。
前面這段話的重點(diǎn)是【鍵值對(duì)】,也就是說字典中的每一個(gè)元素(每一項(xiàng))都是由鍵和值組成的集合,先記住兩個(gè)單詞,鍵(Key)和值(Value),鍵值對(duì)中間用冒號(hào)(:
)分隔,例如字典中的一個(gè)元素(name:'橡皮擦'
),前面的 name 就是鍵,后面的字符串 橡皮擦
就是值,從鍵值對(duì)可以看出,字典屬于一對(duì)一的映射關(guān)系。
字典的聲明
使用空的大括號(hào),可以直接聲明一個(gè)空字典。
my_dict= {} print(my_dict)
定義一個(gè)只有一個(gè)元素的字典。
my_dict= {'name':'橡皮擦'} print(my_dict)
定義由多個(gè)元素的字典。
my_dict= {'name':'橡皮擦','age':19} print(my_dict)
字典設(shè)置時(shí)對(duì)鍵和值的要求 鍵的要求如下: 鍵要唯一,也就是一個(gè)字典對(duì)象所有的鍵必須唯一,出現(xiàn)相同的鍵值對(duì),只保留最后一個(gè),例如下述代碼:
my_dict= {'name':'橡皮擦','name':'擦哥','age':19} print(my_dict)
鍵名無法直接修改,只能刪除原有鍵值對(duì),再新增鍵值對(duì)實(shí)現(xiàn)對(duì)鍵名的修改。
字典的基本方法
字典作為 Python 中的一個(gè)普通對(duì)象,其存在一些基本操作方法,具體如下。
clear()
:清空字典;get()
:通過指定鍵,或者對(duì)應(yīng)值,如果鍵不存在,返回 None;keys()
:獲取所有鍵;values()
:獲取字典中所有值;items()
:以元組格式返回字典中的所有元素;fromkeys()
:使用給定的鍵建立新字典,每個(gè)鍵對(duì)應(yīng)的值默認(rèn)為 None,可以初始化一個(gè)字典;pop()
:刪除指定鍵,并返回鍵對(duì)應(yīng)的值;popitem()
:隨機(jī)返回元素,并刪除;setdefault()
:設(shè)置鍵值對(duì),當(dāng)字典中鍵不存在,新增,當(dāng)字典中存在鍵值對(duì)時(shí),獲取對(duì)應(yīng)的值;update()
:使用一個(gè)字典更新另一個(gè)字典;
字典元素添加
向字典中添加元素,可以使用如下幾種形式。
第一種,直接添加,即一次性添加鍵值對(duì)。
my_dict= {'name':'橡皮擦'} my_dict["age"] = 19 # 直接添加 print(my_dict)
用上述方法添加鍵值對(duì),需要注意添加的鍵在原字典中不存在,否則會(huì)執(zhí)行更新操作。
第二種,通過 setdefault()
給字典添加新鍵值對(duì),代碼如下:
my_dict= {'name':'橡皮擦'} my_dict.setdefault('age',19) print(my_dict)
setdefault()
方法添加已存在的鍵時(shí),不執(zhí)行添加操作,會(huì)返回原鍵對(duì)應(yīng)的值,請(qǐng)測(cè)試下述代碼。
my_dict= {'name':'橡皮擦'} my_dict.setdefault('name',19) print(my_dict)
獲取字典鍵對(duì)應(yīng)的值
通過鍵獲取值,有如下兩種形式,例如通過指定鍵查找對(duì)應(yīng)值。
my_dict= {'name':'橡皮擦'} ret = my_dict['name'] print(ret)
該方法如果指定了一個(gè)不存在的鍵,會(huì)直接報(bào)錯(cuò),錯(cuò)誤信息如下所示。
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-11-3e4eeea728e6> in <module> 1 my_dict= {'name':'橡皮擦'} ----> 2 ret = my_dict['name1'] 3 print(ret) KeyError: 'name1'
使用 get()
方法也可以獲取鍵對(duì)應(yīng)的值,使用該方法獲取值的時(shí)候,如果鍵不存在,不會(huì)報(bào)錯(cuò),并且返回 None。
my_dict= {'name':'橡皮擦'} ret = my_dict.get('name1') print(ret)
如果不希望結(jié)果返回 None,可以設(shè)置缺省返回值,即使用 get()
方法的第二個(gè)參數(shù)。
my_dict= {'name':'橡皮擦'} ret = my_dict.get('name1','無該值') print(ret)
字典元素的修改
字典由于鍵不可被修改,所以只能修改值,下面的兩個(gè)方法都可以修改值。 第一種方法在前文已經(jīng)學(xué)習(xí),即使用中括號(hào)加鍵進(jìn)行修改,這里咱們不再重復(fù)講解,而為大家介紹 update()
方法,該方法可以通過字典修改原字典。
my_dict= {'name':'橡皮擦'} my_dict.update({'name':'大橡皮擦','age':19}) print(my_dict)
使用 update()
方法過程中,你需要注意到,該方法還可以對(duì)原字典進(jìn)行新增操作,即當(dāng)待添加的字典中存在原字典未包含的鍵時(shí),會(huì)執(zhí)行新增操作。
字典元素的刪除
有 1 個(gè)函數(shù)和 2 個(gè)方法可以實(shí)現(xiàn)字典元素的刪除。 第一個(gè)函數(shù)是 del()
,該函數(shù)可以直接刪除字典對(duì)象,也可以刪除字典中的鍵值對(duì),代碼如下:
my_dict= {'name':'橡皮擦'} my_dict.update({'name':'大橡皮擦','age':19}) del(my_dict['age']) print(my_dict)
使用 pop()
方法刪除,示例代碼如下:
my_dict= {'name':'橡皮擦'} my_dict.update({'name':'大橡皮擦','age':19}) ret = my_dict.pop('age') print(ret)
如果使用 pop()
方法刪除不存在的值,會(huì)直接報(bào)錯(cuò),未防止該現(xiàn)象發(fā)生,可以使用 pop()
方法的第二個(gè)參數(shù)。
my_dict= {'name':'橡皮擦'} my_dict.update({'name':'大橡皮擦','age':19}) ret = my_dict.pop('age1',10010) print(ret)
使用 popitem()
方法會(huì)隨機(jī)刪除一個(gè)元素,示例代碼如下:
my_dict= {'name':'橡皮擦'} my_dict.update({'name':'大橡皮擦','age':19}) ret = my_dict.popitem() print(ret)
字典的遍歷
使用 keys()
,values()
和 items()
可以對(duì)字典進(jìn)行遍歷,其對(duì)應(yīng)關(guān)系分別是遍歷所有鍵,遍歷所有值,遍歷所有鍵值。
my_dict= {'name':'橡皮擦'} my_dict.update({'name':'大橡皮擦','age':19}) print(my_dict.keys()) print(my_dict.values()) print(my_dict.items())
輸出結(jié)果如下:
dict_keys(['name', 'age']) dict_values(['大橡皮擦', 19]) dict_items([('name', '大橡皮擦'), ('age', 19)])
集合學(xué)習(xí)
首先依舊是掌握集合的定義,集合是一個(gè)無序的,可變的,不重復(fù)的容器,集合用大括號(hào)({}
)標(biāo)記開始和結(jié)束,中間的元素用逗號(hào)進(jìn)行分隔,集合可以容納任意類型的數(shù)據(jù),而字典其實(shí)是特殊的集合,所以在學(xué)習(xí)的時(shí)候,可以對(duì)比字典進(jìn)行練習(xí)。
集合的定義 集合也是使用大括號(hào)({}
)定義的,但不能使用一個(gè)空大括號(hào),這樣 Python 會(huì)認(rèn)為聲明了一個(gè)空字典,如果希望聲明空集合,需要用 set()
函數(shù)。
my_set= set() print(my_set)
聲明包含一個(gè)元素的集合。
my_set = {1,} print(type(my_set))
集合添加元素
使用 add()
方法可以添加元素,示例代碼如下所示:
my_set = set() my_set.add('橡皮擦') print(my_set)
使用 update()
可以一次增加一個(gè)元素,也可以增加多個(gè)元素。
my_set = set() my_set.update({'橡皮擦',28}) print(my_set)
集合刪除元素
使用 discard()
、remove()
、pop()
方法可以刪除集合中的元素,示例代碼如下。 使用 discard()
可以刪除指定元素,若元素不存在,不報(bào)錯(cuò)(很重要)
my_set = set() my_set.update({'橡皮擦',28,'石家莊','產(chǎn)品經(jīng)理'}) my_set.discard('石家莊') print(my_set)
使用 remove() 可以刪除指定元素,若元素不存在,報(bào)錯(cuò)(很重要)
my_set = set() my_set.update({'橡皮擦',28,'石家莊','產(chǎn)品經(jīng)理'}) my_set.remove('石家莊') print(my_set)
使用 pop() 可以隨機(jī)刪除一個(gè)元素,并返回被刪除的元素
統(tǒng)計(jì)集合個(gè)數(shù),判斷元素是否存在,清空集合
如題所示,該小節(jié)存在 3 個(gè)知識(shí)點(diǎn),分別是 len()
、in 成員運(yùn)算符
、clear()
,示例代碼如下。
len() 函數(shù)用法
my_set = set() my_set.update({'橡皮擦',28,'石家莊','產(chǎn)品經(jīng)理'}) my_set.discard('石家莊') print(len(my_set))
in 成員運(yùn)算符用法
my_set = set() my_set.update({'橡皮擦',28,'石家莊','產(chǎn)品經(jīng)理'}) ret = '石家莊' in my_set print(ret)
clear() 方法使用
my_set = set() my_set.update({'橡皮擦',28,'石家莊','產(chǎn)品經(jīng)理'}) my_set.clear() print(my_set)
集合運(yùn)算
Python 語(yǔ)言中的集合于數(shù)學(xué)中的集合概念基本一致,所以其包含交并差集的計(jì)算,接下來為大家逐一說明。
求并集 union() 方法
A = {1,2,3} B = {4,5,1} ret = A.union(B) print(ret)
還可以使用 |
符號(hào)。
A = {1,2,3} B = {4,5,1} ret = A | B print(ret)
求交集 intersection()
方法,也可以使用 intersection_update()
方法 二者的區(qū)別是前者返回新集合,后者在原集合上進(jìn)行更新。
A = {1,2,3} B = {4,5,1} ret = A.intersection(B) print(ret)
對(duì)比下述代碼,查看區(qū)別。
A = {1,2,3} B = {4,5,1} ret = A.intersection_update(B) print(ret) # 返回None print(A)
使用符號(hào) &
也可以實(shí)現(xiàn)交集操作,同 intersection()
方法。
求差集 difference()
方法 求差異的時(shí)候需要注意誰在前誰在后問題,即 A-B 和 B-A 得到的結(jié)果是不同的。
A = {1,2,3} B = {4,5,1} ret = A.difference(B) print(ret)
求差異也可以使用符號(hào) -
實(shí)現(xiàn),代碼請(qǐng)自行編寫。
到此這篇關(guān)于Python學(xué)習(xí)之字典和集合的使用詳解的文章就介紹到這了,更多相關(guān)Python字典 集合內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
我對(duì)PyTorch dataloader里的shuffle=True的理解
這篇文章主要介紹了我對(duì)PyTorch dataloader里的shuffle=True的理解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Python實(shí)現(xiàn)B站UP主自動(dòng)監(jiān)控功能詳解
眾所周知,B站有很多有趣的UP主,可以教大家一些"實(shí)用"的知識(shí),但是他們一般都沒有固定的更新時(shí)間。因此,本文將用Python編寫一個(gè)腳本,自動(dòng)監(jiān)控UP是否更新了視頻,感興趣的可以了解一下2022-03-03pytorch tensor int型除法出現(xiàn)的問題
這篇文章主要介紹了pytorch tensor int型除法出現(xiàn)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04使用Python實(shí)現(xiàn)批量發(fā)送個(gè)性化郵件
在現(xiàn)代工作環(huán)境中,我們經(jīng)常需要向多個(gè)收件人發(fā)送個(gè)性化的郵件,因此本文小編為大家整理了Python實(shí)現(xiàn)批量發(fā)送個(gè)性化郵件的示例代碼,希望對(duì)大家有所幫助2023-11-11python的tkinter布局之簡(jiǎn)單的聊天窗口實(shí)現(xiàn)方法
這篇文章主要介紹了python的tkinter布局之簡(jiǎn)單的聊天窗口實(shí)現(xiàn)方法,對(duì)于tkinter用法做了初步的介紹與應(yīng)用展示,需要的朋友可以參考下2014-09-09python和php學(xué)習(xí)哪個(gè)更有發(fā)展
在本篇內(nèi)容里小編給大家分析了關(guān)于python和php學(xué)習(xí)哪個(gè)更有發(fā)展相關(guān)論點(diǎn),有興趣的朋友們參考下。2020-06-06