Python3 自學第7天:字典dict

Python3 自學第7天:字典dict

前面我們瞭解了列表list和元組tuple兩個序列,是存儲不同類型數據的容器。

對列表和元組不清楚的朋友可以瞭解下這兩篇文章:

《 》

《 》

今天我們瞭解下另外一種容器類型:字典dict它可以存儲任意類型的對象

字典dict定義,它裡面的元素是“健值對”形式,包裹在花括號{ }裡面,用冒號(:)將鍵key與值value隔開;“鍵值對”之間用逗號(,)分開,也就是元素之間用逗號(,)分開,這點和list,tuple是一樣的。

key與value 之間是一種映射關係,格式如下:

Python3 自學第7天:字典dict

創建字典,實例代碼:

Python3 自學第7天:字典dict

字典鍵key的兩個特性:

1)鍵key在字典裡是唯一的,不允許同一個鍵Key出現兩次。

2)鍵key的類型必須是不可變的,如數字,字符串,元組等;

鍵key對應的值value可以是任何數據類型。

我們可以通過setdefault()方法為value設置默認值,如:

dict_org.setdefault('sex', 'man')

如何獲取字典dict的值,實例代碼:

Python3 自學第7天:字典dict

注意了,訪問元素時如果key不存在會報KeyError異常。

用dict.get(key)方法獲取指定鍵key的值value,

實例代碼如下:

Python3 自學第7天:字典dict

注意:如果指定的鍵key不存在(比如上面的'sex')是需要指定一個默認值的,否則會報錯的。如果鍵key存在,值不存在,返回默認值。

如何來更新字典呢,實例代碼:

Python3 自學第7天:字典dict

注意上面的'tel',它是一個不存在的鍵key,通過 = 賦值後會作為新元素被添加到字典裡面;

如果這個'tel'鍵key已經存在,通過 = 賦值後只會做修改操作。

總結一下:用 = 賦值時,key存在就修改,不存在就添加;

我們也可以用dict.update()方法來更新字典dict,實例代碼:

Python3 自學第7天:字典dict

我們發現兩個字典裡都有一個同名鍵'year',update()方法會去重,再把dict2裡的內容更新到dict1裡,以確保字典裡的鍵key是唯一的。

如何來刪除字典對象及呢,實例代碼:

Python3 自學第7天:字典dict

dict.pop(key)會返回被刪除的值,同時字典本身也變更了;

如果刪除一個不存在的key,是要指定默認值key的,否則會報錯,如:dict_org.pop('tel','phone')

還可以用我們熟悉的del語句刪除元素和字典對象,實例代碼:

Python3 自學第7天:字典dict

注意:del語句可以刪除字典裡的單個元素,dict.clear()方法是清空字典dict裡面的所有元素。

Python3 自學第7天:字典dict

注意:del語句可以刪除整個字典對象,刪除以後dict_org字典對象就不存在了,再訪問就會報錯。

類型轉換 str(dict),實例代碼:

Python3 自學第7天:字典dict

判斷鍵key是否存,用 in 或 not in 操作符,實例代碼:

Python3 自學第7天:字典dict

常用的幾個字典方法

其實前面已經用過一些字典方法了,下面再補充幾個:

dict.items()返回一個可迭代對象,它把k:v健值對轉換成元組存為列表的元素,其結果類似“列表嵌套元組”,實例代碼:

Python3 自學第7天:字典dict

我們可以通過遍歷items()把字典dict編排成一個新列表list,相當於list(dict)方法的實現過程,代碼如下:

Python3 自學第7天:字典dict

提取字典裡的所有鍵:keys() 方法返回一個可迭代對象,相當於字典的key集合,可以使用 list() 來轉換為列表,實例代碼:

Python3 自學第7天:字典dict

提取字典裡的所有值:values() 方法返回一個可迭代對象,相當於字典的value集合,可以使用 list() 來轉換為列表,實例代碼:

Python3 自學第7天:字典dict

創建字典,dict.fromkeys(seq,v),將seq中的元素做為字典元素的key。

Python3 自學第7天:字典dict

下面重點說下字典的淺拷貝和深拷貝,以及與直接賦值的區別;

直接賦值:其實就是對象的引用(對象的一個標籤名,別名而已)。

淺拷貝(dict.copy()):拷貝父對象,不會拷貝對象的內部的子對象。

深拷貝(copy.deepcopy()): 它是copy模塊的deepcopy方法,完全拷貝了父對象及其子對象。

先來看下直接賦值和淺拷貝:

Python3 自學第7天:字典dict

我們再看看深拷貝,需要導入copy模塊:

Python3 自學第7天:字典dict

總節一下:

用等號 = 是賦值引用,a,b其實是同一條引用,這個引用又指向了對象obj

淺拷貝後雖然dict_a,dict_b是兩個獨立對象,即兩個引用,這兩個引用又指向同一個對象obj。只要更新其中一個,另外一個也會跟更新。

深拷貝後dict_a,dict_b是兩個完全獨立對象,它倆完全拷貝了父對象及其子對象;也就是說每個引用不再指向同一個對象,而是各自有了獨立的指向對象,所以深拷貝後修改字典是互不影響的。

copy模塊也有個淺拷貝方法copy.copy(obj),大家可以自己試下;copy模塊針對的所有python對象的拷貝;

總結一下: 等號=賦值和淺拷貝後,指向沒變;深拷貝後,指向獨立了。

OK!Python數據類型的字典dict就分享到這裡,如果您有什麼問題,請在評論區留言,我會及時回覆,感謝!

【極客乾貨】從事IT行業十餘年,在移動互聯網開發,J2EE企業級開發,IOT物聯網,AI人工智能等方面有點技術積累,熟練使用C/C++,Java,Python等編程語言。從2009年開始接觸Python,後續借空閒時間將個人熟悉的技術乾貨系統性分享給大家,也許我的分享會讓你少走一些彎路,如果您覺得還可以,請多多關注,評論和轉發,非常感謝!


分享到:


相關文章: