小白學 Python(13):基礎資料結構(字典)(下)
人生苦短,我選Python
前文傳送門
小白學 Python(1):開篇
小白學 Python(2):基礎資料型別(上)
小白學 Python(3):基礎資料型別(下)
小白學 Python(4):變數基礎操作
小白學 Python(5):基礎運算子(上)
小白學 Python(6):基礎運算子(下)
小白學 Python(7):基礎流程控制(上)
小白學 Python(8):基礎流程控制(下)
小白學 Python(9):基礎資料結構(列表)(上)
小白學 Python(10):基礎資料結構(列表)(下)
小白學 Python(11):基礎資料結構(元組)
小白學 Python(12):基礎資料結構(字典)(上)
字典內建函式 & 方法
(如果是來看錶情包的,可以退出去了,本篇無表情包)
字典提供了很多內建方法對字典進行操控。
老規矩,一邊看程式碼一邊介紹。
dict.keys()
作用: 返回一個迭代器,可以使用 list() 來轉換為列表,該列表包含所有的 key。
dict1 = {'name': 'geekdigging', 'age': 2}
print(dict1.keys())
print(list(dict1.keys()))
print(type(list(dict1.keys())))
結果如下:
dict_keys(['name', 'age']) ['name', 'age'] <class 'list'>
dict.values()
作用: 返回一個迭代器,可以使用 list() 來轉換為列表,該列表包含所有的 value 。
print(dict1.values())
print(list(dict1.values()))
print(type(list(dict1.values())))
結果如下:
dict_values(['geekdigging', 2])
['geekdigging', 2]
<class 'list'>
dict.items()
作用: 以列表返回可遍歷的(鍵, 值) 元組陣列。
print(dict1.items()) print(list(dict1.items())) print(type(list(dict1.items())))
結果如下:
dict_items([('name', 'geekdigging'), ('age', 2)])
[('name', 'geekdigging'), ('age', 2)]
<class 'list'>
dict.get(key, default=None)
作用: 返回指定鍵的值,如果值不在字典中返回 default(None) 值。
print(dict1.get('name'))
print(dict1.get('geekdigging'))
結果如下:
geekdigging
None
因為 geekdigging
並不是字典中的 key ,所以返回了預設值 None 。
dict.pop(key[,default])
作用: 刪除字典給定鍵 key 所對應的值,返回值為被刪除的值。key值必須給出。
print(dict1.pop('age'))
print(dict1)
結果如下:
2
{'name': 'geekdigging'}
dict.setdefault(key, default=None)
作用: 和get()類似, 但如果鍵不存在於字典中,將會新增鍵並將值設為 default 。
dict1.setdefault('age')
print(dict1)
結果如下:
{'name': 'geekdigging', 'age': None}
dict.update(dict2)
作用: 把字典 dict2 的鍵/值對更新到 dict 裡。
dict2 = {'sex': 'male'}
dict1.update(dict2)
print(dict1)
結果如下:
{'name': 'geekdigging', 'age': None, 'sex': 'male'}
dict.clear()
作用: 刪除字典內所有元素。
注意: 刪除字典內所有元素,並非刪除字典。
dict2.clear()
print(dict2)
結果如下:
{}
dict.copy()
作用: 返回一個字典的淺複製。
注意: 這裡的 copy 是淺 copy ,有程式設計經驗的同學估計理解起來並無難度。無經驗的同學且聽我慢慢道來,淺拷貝本質上拷貝的是一個引用,並非拷貝了整個內容,舉例子的話就好比我有一個蘋果,並且淺拷貝了一個給小明,我咬了一口我的蘋果,但是小明發現他的蘋果也被咬了一口。
dict3 = {'name': 'geekdigging', 'age': [1, 2, 3]}
# 淺拷貝: 引用物件
dict4 = dict3
print(id(dict3))
print(id(dict4))
# 淺拷貝:深拷貝父物件(一級目錄),子物件(二級目錄)不拷貝,還是引用
dict5 = dict3.copy()
dict3['age'].remove(1)
print(dict3)
print(dict5)
print(id(dict3))
print(id(dict5))
結果如下:
2418990911064
2418990911064
{'name': 'geekdigging', 'age': [2, 3]}
{'name': 'geekdigging', 'age': [2, 3]}
2418990911064
2418991599688
這個示例理解稍有費勁兒,不著急,慢慢品,細品。
如果我想全都深 copy ,怎麼做呢?
可以引入 copy 模組實現。
import copy
dict3 = {'name': 'geekdigging', 'age': [1, 2, 3]}
dict6 = copy.deepcopy(dict3)
dict3['age'].remove(1)
print(dict3)
print(dict6)
print(id(dict3))
print(id(dict6))
結果如下:
{'name': 'geekdigging', 'age': [2, 3]}
{'name': 'geekdigging', 'age': [1, 2, 3]}
2418991602168
2418991602008
初次接觸的同學,以上兩個示例並不好理解,如果在理解上有問題的可以在公眾號留言問我。
老生常談再多 BB 一句,請各位同學親自動手實踐一下示例程式碼。
示例程式碼
本系列的所有程式碼小編都會放在程式碼管理倉庫 Github 和 Gitee 上,方便大家取用。
示例程式碼-Github
示例程式碼-Gi