官术网_书友最值得收藏!

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'}
主站蜘蛛池模板: 岑溪市| 贵南县| 锦屏县| 南雄市| 东宁县| 宣武区| 遂溪县| 临洮县| 灵武市| 迁安市| 沂南县| 攀枝花市| 融水| 京山县| 华宁县| 卢龙县| 方正县| 云安县| 温州市| 上饶县| 南阳市| 新化县| 德阳市| 龙山县| 静安区| 永济市| 吴旗县| 堆龙德庆县| 徐汇区| 辛集市| 团风县| 崇明县| 拉孜县| 玉田县| 博白县| 社会| 晴隆县| 吴江市| 临武县| 岳西县| 工布江达县|