搬磚的也能玩Python-基礎篇3
搬磚的也能玩Python——基礎篇
3-常見的基礎集合類型2(字典、集合)
回顧
上一篇中,我們了解了兩種集合類型:列表、元組,同時也學習了一個非常方便的切片操作。今天這篇內容,我們主要學習另外兩種集合類型:字典、集合。
一、字典
我們已經知道列表是一系列按特定順序排列的元素,每個元素都有自己的索引,我們想要獲取元素的話,只需要通過索引就可以獲取。但是如果說一個列表非常大,有上萬個元素的話,每次找到我們需要的元素,都必須按照索引從頭到尾開始找,直到找到我們需要的元素。有沒有什麼辦法可以更加快速靈活的找到我們需要的元素呢?這個時候就需要字典出馬了。
字典是用一系列的「鍵-值」對來表示,放在大括弧({ })中,鍵和值之間用分號(:)來分隔,用逗號(,)來分隔其中的「鍵-值」對,也就是。
我們要注意的是:
不可變的數據類型
什麼是不可變的數據類型呢?
簡單點說,就是定義好的數據,不會發生變化,那麼這個數據所屬的數據類型就是不可變的。
按照前面兩篇文章學習的內容,只有列表在定義好之後,可以進行增加、修改、刪除,所以列表就是可變的數據類型,不可以作為字典的「鍵」;而元組是不可變的列表,所以元組可以作為字典的「鍵」。其他的數據類型,比如數字、字元串、布爾值,定義好之後都不會變,都可以作為字典的「鍵」。
對於字典,我們還可以這樣通俗的去理解:我們給幾萬條數據做了一個目錄,每一個數據都有一個頁碼對應,當我們想找到相應的數據時,我們先從目錄裡面找一下這個數據在第幾頁,然後翻到那一頁,就可以找到數據了。如果是列表的話,就是沒有目錄,只有頁碼,要一頁一頁的去翻,直到翻到數據所在的那一頁。所以Python中的字典可以跟我們上學的時候用過的新華字典聯繫起來。
最後,我們來舉幾個簡單的字典例子:
從上面這些例子的輸出結果可以很清晰的看到,我們的字典沒有特定的順序。如果想要創建有特性順序的字典,需要用到Python內置的collections模塊,這部分內容我們將在高級篇中介紹,歡迎大家持續關注。
二、字典的簡單操作
我們已經了解了列表可以進行元素的訪問、修改、增加、刪除,那麼字典的訪問、修改、增加、刪除應該如何操作呢?
訪問字典的值
在列表中,我們是用元素的索引來訪問具體的元素,其實我們可以把索引想像成列表各元素的「鍵」,所以我們要訪問字典的值,只需要提供「鍵」就可以了,將「鍵」放在方括弧中,緊跟在字典後面即可。
字典[鍵]
同樣的,要想獲得字典的長度,我們也是使用len( )方法。
len(字典)
修改字典的值
了解了字典的訪問之後,我們來看一下字典的值的修改,其實也跟列表類似,將某一個「鍵」重新賦值即可。
字典[鍵]=新的值
注意
由於我們的「鍵」是不可變的數據類型,所以對於字典的修改,我們也只是修改「值」,而「鍵」是無法修改。
增加字典內容
由於我們的字典是沒有特定順序的,所以我們增加字典內容的時候,也就不存在在什麼位置增加,而且增加的「鍵」也不能跟現有的「鍵」重複。
增加字典內容的方式跟修改字典類似,只是我們在字典後面的方括弧填入的「鍵」是一個「新鍵」即可,這樣就完成了字典內容的增加。
字典[新鍵]=新鍵對應的值
刪除字典內容
字典的刪除也可以借鑒我們的列表:
1、刪除指定「鍵-值」對(刪除後不再使用)
當我們刪除指定「鍵-值」對,並且不再使用這個值時,我們可以用del方法,後面跟具體要刪除的指定的字典的「鍵」。
del 字典[鍵]
2、刪除指定「鍵-值」對(刪除後還會使用)
跟列表一樣,我們可以用pop( )方法,解決del方法無法告訴我們刪除的具體值的問題,在pop( )方法的括弧中,填入要刪除的字典的「鍵」即可。
字典.pop(鍵)
注意
由於字典沒有特定的順序,所以我們在用pop( )方法的時候,括弧中必須要填寫「鍵」,不能像列表一樣,不填寫內容會刪除最後一個元素。
如果我們不填寫字典的「鍵」,系統會報異常,提示我們需要填寫一個參數。
三、集合
最後我們再了解一個概念——集合,就是一系列沒有特定順序、沒有重複數據的元素。集合用大括弧({ })來表示,用逗號(,)來分隔其中的元素,也就是。
也可以用set( )方法,將列表、元組、字元串、數字、布爾值轉變成集合。
我們需要注意的是:
我們來看幾個集合的例子:
從上面的例子中,可以很清晰的看到,當存在重複的元素時,我們最終得到的集合,都會把重複的元素刪掉,保留一個。
四、集合的簡單操作
通過前面的了解,我們發現集合既不像列表那樣有順序,也不像字典那樣有個「鍵」,所以要想單獨訪問集合中的某一個元素,現在是沒有辦法的。但我們可以利用for循環來遍歷集合中的每一個元素,具體的方法將在下篇文章中詳解。
本次我們就簡單了解一下集合的增加、刪除、交集、並集、差集。
增加集合元素
在集合中,我們通過add( )方法或者update( )方法,來添加新的元素。
集合.add(新元素)
同樣的,由於集合的元素必須是唯一的,所以在上圖的例子中,當我們再次添加數字2的時候,整個numbers集合是沒有發生任何變化的。
集合.update(新元素)
從上面的圖片中,我們可以看到,在使用update( )方法的時候,我們要把增加的元素放在了括弧中,也就是以元組的形式往裡增加,而前面的add( )方法則可以直接把要增加的元素放在add( )方法的括弧中。
如果update( )方法也很add( )方法那樣添加的話,會有下圖的報錯。
思考
為什麼會有這樣的區別的?
解析
這是由於update( )方法在添加元素的時候,會把整個要添加的元素進行拆分,拆分成單個的元素,再添加到集合中,這就要求添加的元素必須是可迭代的(iterable),同時添加的元素也必須是不可變的數據類型;而add( )方法,則是把整個要添加的元素作為一個整體,添加到集合中去。
具體的關於可迭代的(iterable)內容,我們將放在高級篇的迭代器中詳細講解。
我們來看下面這個例子,可以非常清楚的對比出add( )方法和update( )方法的區別。
我們可以看到,當用add( )方法時,元組(4, 5, 6)會作為一個整體添加到numbers1中,使得numbers1的結果最終為;而在update( )方法中,會把(4, 5, 6)拆分成4、5、6三個元素分別添加到numbers2中,由於4、5已經存在,所以最終只把6添加了進去,使得numbers2的結果最終為。
刪除集合元素
在集合中,我們講兩種刪除的方法:
1、刪除某體的某一元素
我們可以用remove( )方法,在括弧中填入要刪除的具體值即可。
集合.remove(具體元素)
2、隨機刪除某一元素
我們可以用pop( )方法,隨機刪除一條元素,由於集合沒有特定順序,也沒有字典那樣的鍵,所以我們沒有辦法通過索引或者鍵來刪除某一元素。
集合的運算
我們來了解三個集合的運算,這裡的運算跟數學上集合的運算完全一樣,我們來看一下Python中是如何進行集合的交集、並集、差集運算。
1、交集運算
假設有2個集合A和B,所謂的交集運算,就是既在A中出現,也在B中出現的元素的集合,我們用"&"符號來運算。
2、並集運算
假設有2個集合A和B,所謂的並集運算,就是在A中出現,或者在B重出現的元素的集合,我們用""符號來運算。
3、差集運算
假設有2個集合A和B,所謂的差集運算,就是在A中出現,但沒有在B中出現的元素的集合,我們用符號"-"來運算。
其實集合還有很多運算,感興趣的讀者可以自行了解。
五、嵌套
最後我們來學習一個比較複雜的數據嵌套,主要講下面幾種:
我們來學習如何獲取嵌套數據中的某一個元素,其實就是從外到內,一層一層的把數據類型分析出來,利用各數據類型的訪問方法來找到我們想要的元素。這種操作在我們處理爬取的數據時,經常會用到。
思考
下面我會列出4種嵌套,我們一起找到「火箭」這個元素。
1、列表嵌套列表
看到圖片中的嵌套,我們先來分析,它是由2層的方括弧組成,所以也就是列表嵌套列表的格式,即[[ ], [ ], [ ]],最外面一層是個列表,列表中的每一個元素也還是列表,我們只需要用2次列表的訪問方式。
首先我們看到「火箭」是在第3個方括弧中,也就是索引為2的元素中,我們先用西部球隊[2]的方法,得到「火箭」所在的列表,此時我們把西部球隊[2]看做一個新的列表,「火箭」在這個列表中的索引是0,所以用西部球隊[2][0]就可以找到「火箭」了。
答案
西部球隊[2][0]
2、列表嵌套字典
看到圖片中的嵌套,我們先來分析,它最外層是方括弧,裡面一層是大括弧,所以也就是列表嵌套字典的格式,即[{ }, { }, { }],最外面一層是個列表,列表中的每一個元素又是一個字典,我們需要先用列表的訪問方式,再用字典的訪問方式。
首先我們看到「火箭」所在的字典是在第3個大括弧中,也就是索引為2的元素中,我們先用西部球隊[2]的方法,得到「火箭」所在的字典,此時我們把西部球隊[2]看做一個字典,「火箭」在這個字典中的「鍵」是"HOU",所以用西部球隊[2]["HOU"]就可以找到「火箭」了。
答案
西部球隊[2]["HOU"]
3、字典嵌套列表
由於字典的「鍵」是不可改變的元素類型,所以我們所謂的字典嵌套列表,就是指字典的「鍵」所對應的「值」是列表類型。
看到圖片中的嵌套,我們先來分析,它的最外層是大括弧,也就是字典,字典的「鍵」所對應的「值」是方括弧,所以也就是字典嵌套列表的格式,即{"鍵": [ ], "鍵": [ ], "鍵": [ ]},我們需要先用字典的訪問方式,再用列表的訪問方式。
首先,我們看到「火箭」所在的列表,對應的「鍵」為「西南部賽區」,我們先用西部球隊["西南部賽區"]的方法,得到「火箭」所在的列表,此時我們把西部球隊["西南部賽區"]看做一個列表,「火箭」在這個列表中的索引為0,所以用西部球隊["西南部賽區"][0]就可以找到「火箭」了。
答案
西部球隊["西南部賽區"][0]
4、字典嵌套字典
由於字典的「鍵」是不可改變的元素類型,所以我們所謂的字典嵌套字典,就是指字典的「鍵」所對應的「值」是字典類型。
看到圖片中的嵌套,我們先來分析,它的最外層是大括弧,也就是字典,字典的「鍵」所對應的「值」也是大括弧,所以也就是字典嵌套字典的格式,即{{ }, { }, { }},我們需要用2次字典的訪問方式。
首先,我們看到「火箭」所在的字典,對應的「鍵」為「西南部賽區」,我們先用西部球隊["西南部賽區"]的方法,得到「火箭」所在的字典,此時我們把西部球隊["西南部賽區"]看做一個新的字典,「火箭」在這個字典中的鍵是"HOU",所以用西部球隊["西南部賽區"]["HOU"]就可以找到「火箭」了。
答案
西部球隊["西南部賽區"]["HOU"]
嵌套的類型我們會經常遇到,大家要能夠靈活的運用各類型數據的訪問方法,來獲取嵌套中的元素。
探測八個蛋∣跳出手工測試的井
TAG:Python |