- Django 2.0 入門與實踐
- 李健
- 1318字
- 2020-06-30 17:19:09
2.6 Dictionary類型
字典(Dictionary)是一種數據結構,它像列表一樣存儲多個元素,每個元素都包含一個鍵(Key)和值(Value),其中鍵是不能重復的,而值是可以重復的。字典中的鍵-值對沒有特定的存儲順序,讀者可以通過鍵來快速得到對應的值,這與通過書籍目錄來快速查找章節一樣。
Python中的字典使用大括號“{}”表示,其中的鍵-值對使用冒號分隔,鍵值對之間使用逗號分隔,例如:
>>> roomnumber = {"Aaron":"0001", "Tom":"0002", "Kate":"0003"}
2.6.1 訪問字典元素
剛才講到字典中的鍵類似于數據的目錄,所以可以通過鍵來查找元素值,方法如下:
>>> roomnumber["Aaron"] '0001'
如果訪問的鍵不存在,會輸出錯誤:
>>> roomnumber["Richard"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'Richard'
2.6.2 檢查字典中是否存在某個鍵
>>> "Aaron" in roomnumber True >>> "Jack" in roomnumber False
2.6.3 修改字典
1. 添加鍵-值對
可以通過訪問字典值的方式添加鍵-值對,雖然字典中并不存在該鍵,但是字典會自動增加一個鍵-值對,如修改前面例子如下:
>>> roomnumber["Richard"]="0004" >>> roomnumber {"Aaron":"0001", "Tom":"0002", "Kate":"0003", "Richard":"0004"}
2. 刪除一個鍵-值對
>>> del roomnumber["Kate"] >>> roomnumber {"Aaron":"0001", "Tom":"0002", "Richard":"0004"}
3. 修改一個鍵關聯的值
>>> roomnumber["Richard"]="0003" >>> roomnumber {"Aaron":"0001", "Tom":"0002", "Richard":"0003"}
2.6.4 字典方法
1. clear
用于清空字典中的所有項,該方法不返回任何內容:
>>> roomnumber.clear() >>> roomnumber {}
2. copy
在講解這個方法之前,先了解兩個概念:淺拷貝和深拷貝。
對于可變對象如列表、字典,直接賦值時只會將一個對象的引用傳遞給另一個對象,此時修改其中一個對象就會改變另一個對象,如:
>>> a = [1,2,3] >>> b = a >>> a,b ([1, 2, 3], [1, 2, 3]) >>> a[0]=100 >>> a,b ([100, 2, 3], [100, 2, 3])
大多數情況下,一個可變對象內還可以嵌套其他可變對象,此時淺拷貝只會拷貝頂級對象,而對于嵌套的對象,只會拷貝它的引用,所以修改頂級對象不會影響另一個對象,但是如果修改嵌套的對象就會影響兩個對象了:
>>> a = [1,2,3, ["Aaron", "Tom"]] >>> b = a.copy() >>> a,b ([1, 2, 3, ['Aaron', 'Tom']], [1, 2, 3, ['Aaron', 'Tom']]) >>> a[1]=100 >>> a,b ([1, 100, 3, ['Aaron', 'Tom']], [1, 2, 3, ['Aaron', 'Tom']]) >>> b[3][1]="Jacky" >>> a,b ([1, 100, 3, ['Aaron', 'Jacky']], [1, 2, 3, ['Aaron', 'Jacky']])
由此可見,在淺拷貝的情況下修改頂級元素不會影響另一個對象,但是修改內部可變元素時就會同時修改原始對象與新對象了,為了解決這個問題字典提供了一個深拷貝方法。深拷貝就是將頂級對象以及子對象的值同時拷貝給新對象,此時修改任何一個都不會影響另一個。
由于字典也是可變對象,所以copy方法也遵循以上原則。
如果想對字典進行深拷貝操作,需要引用copy包中的deepcopy方法:
>>> from copy import deepcopy >>> a = {"Aaron":"0001", "Tom":"0002", "Kate":"0003", "Richard":"0004"} >>> b = deepcopy(a) >>> a,b ({'Aaron': '0001', 'Tom': '0002', 'Kate': '0003', 'Richard': '0004'}, {'Aaron': '0001', 'Tom': '0002', 'Kate': '0003', 'Richard': '0004'}) >>> a["Aaron"]="1" >>> a,b ({'Aaron': '1', 'Tom': '0002', 'Kate': '0003', 'Richard': '0004'}, {'Aaron': '0001', 'Tom': '0002', 'Kate': '0003', 'Richard': '0004'})
3. fromkeys
使用給定的一些鍵創建一個新的字典,所有鍵對象的值為None。
>>> {}.fromkeys(["name", "age"]) {'name': None, 'age': None}
如果不想用None來作為默認值,也可以給定其他值:
>>> {}.fromkeys(["length", "width", "height"], 0) {'length': 0, 'width': 0, 'height': 0}
4. get
訪問一個字典項,如果試圖訪問的字典項不存在時返回None,也可以返回其他值,對字典本身沒有任何影響:
>>> a = {"Aaron":"0001", "Tom":"0002", "Kate":"0003", "Richard":"0004"} >>> a.get("Aaron") '0001' >>> a.get("Jacky") >>> a {'Aaron': '0001', 'Tom': '0002', 'Kate': '0003', 'Richard': '0004'} >>> a.get("Jacky", "N/A") 'N/A' >>> a {'Aaron': '0001', 'Tom': '0002', 'Kate': '0003', 'Richard': '0004'}
5. items
items會將字典中的所有項以列表的方式返回,返回時沒有特殊順序:
>>> a = {"Aaron":"0001", "Tom":"0002", "Kate":"0003", "Richard":"0004"} >>> a.items() dict_items([('Aaron', '0001'), ('Tom', '0002'), ('Kate', '0003'), ('Richard', '0004')])
6. keys
將字典中的鍵以列表的形式返回:
>>> a.keys() dict_keys(['Aaron', 'Tom', 'Kate', 'Richard'])
7. values
將字典中的值以列表的形式返回:
>>> a.values() dict_values(['0001', '0002', '0003', '0004'])
8. pop
刪除一個鍵-值對并返回對應的值:
>>> a = {'Aaron': '0001', 'Tom': '0002', 'Kate': '0003', 'Richard': '0004'} >>> a.pop("Richard") '0004' >>> a {'Aaron': '0001', 'Tom': '0002', 'Kate': '0003'}
9. popitem
隨機刪除一個字典項并返回:
>>> a.popitem() ('Kate', '0003') >>> a {'Aaron': '0001', 'Tom': '0002'}
10. setdefault
與get方法基本一致,唯一的區別就是當鍵不存在時,setdefault方法會創建一個新字典項:
>>> a.setdefault("Lisa", "0005") '0005' >>> a {'Aaron': '0001', 'Tom': '0002', 'Lisa': '0005'}
11. update
根據一個字典項更新字典,如果字典項在原始字典中不存在則在字典中添加該項:
>>> a.update({"Lisa":"0003"}) >>> a {'Aaron': '0001', 'Tom': '0002', 'Lisa': '0003'} >>> a.update({"Tracy":"0004"}) >>> a {'Aaron': '0001', 'Tom': '0002', 'Lisa': '0003', 'Tracy': '0004'}
- 大學計算機基礎(第二版)
- Django開發從入門到實踐
- 趣學Python算法100例
- Clojure for Domain:specific Languages
- GitLab Repository Management
- Java零基礎實戰
- HoloLens與混合現實開發
- 深度學習原理與PyTorch實戰(第2版)
- Learning Nessus for Penetration Testing
- Three.js權威指南:在網頁上創建3D圖形和動畫的方法與實踐(原書第4版)
- 零基礎學SQL(升級版)
- Learning D3.js 5 Mapping(Second Edition)
- Docker on Windows
- HTML5+CSS+JavaScript深入學習實錄
- Building Microservices with .NET Core 2.0(Second Edition)