小白學 Python(12):基礎資料結構(字典)(上)
人生苦短,我選Python
前文傳送門
小白學 Python(1):開篇
小白學 Python(2):基礎資料型別(上)
小白學 Python(3):基礎資料型別(下)
小白學 Python(4):變數基礎操作
小白學 Python(5):基礎運算子(上)
小白學 Python(6):基礎運算子(下)
小白學 Python(7):基礎流程控制(上)
小白學 Python(8):基礎流程控制(下)
小白學 Python(9):基礎資料結構(列表)(上)
小白學 Python(10):基礎資料結構(列表)(下)
小白學 Python(11):基礎資料結構(元組)
字典
我先問一下,有沒用過字典的麼?
我們先看一下現實中字典長啥樣。
嗯,這本字典看起來很有年代感了。
那麼 Python 中的字典是什麼樣呢?
我們一邊看程式碼一邊聊:
建立字典
字典由一組鍵(key)值(value)對組成的,類似於:
{key1: value1, key2: value2}
這樣一種形式。
字典的每個鍵值(key=>value)對用冒號 :
分割。
每個對之間用逗號 ,
分割。
整個字典包括在花括號 {}
中。
dict1 = {'name': 'geekdigging', 'age': 2} print(dict1) print(type(dict1))
結果如下:
{'name': 'geekdigging', 'age': 2}
<class 'dict'>
注意: 鍵必須是唯一的,但值則不必。值可以取任何資料型別,但鍵必須是不可變的,如字串,數字或元組。
我們建立一個奇葩一點的字典(該字典無任何含義,僅供演示):
dict2 = {(1, 2, 3): '123', 'name': 'geekdigging', 2: [1, 2, 3]}
print(dict2)
print(type(dict2))
結果如下:
{(1, 2, 3): '123', 'name': 'geekdigging', 2: [1, 2, 3]} <class 'dict'>
其實還可以這麼建立:
dict3 = dict(name = 'geekdigging', age = 2)
print(dict3)
print(type(dict3))
結果如下:
{'name': 'geekdigging', 'age': 2}
<class 'dict'>
這種情況下,鍵只能為字串型別,並且建立的時候字串不能加引號,加上就會直接報語法錯誤。
比如我們嘗試將鍵變為數字:
dict3 = dict(1 = 'geekdigging', 2 = 2)
結果如下:
File "D:/Development/Projects/python-learning/base-data-dict/Demo.py", line 13
dict3 = dict(1 = 'geekdigging', 2 = 2)
^
SyntaxError: keyword can't be an expression
訪問字典中的值
語法: 字典名[鍵]
print(dict1['name'])
結果如下:
geekdigging
注意: 如果我們查詢的鍵在字典中不存在,會直接報錯。
print(dict1['geekdigging'])
結果如下:
Traceback (most recent call last):
File "D:/Development/Projects/python-learning/base-data-dict/Demo.py", line 18, in <module>
print(dict1['geekdigging'])
KeyError: 'geekdigging'
報錯資訊是 KeyError
,說明我們的鍵錯誤。
如果要避免以上問題,需要先查詢當前鍵是否存在,可以使用以下語句:
語法: 鍵 in 字典
那麼上面的語句我們結合前面的流程控制,可以改為以下:
str = 'geekdigging'
if str in dict1:
print(dict1['geekdigging'])
else:
print('您查詢的鍵', str, '不存在')
結果如下:
您查詢的鍵 geekdigging 不存在
新增、刪除、更新 字典中的鍵值對:
# 新增
dict1['a'] = 18
print(dict1)
# 更新
dict1['name'] = 'www.geekdigging.com'
print(dict1)
# 刪除
del dict1['a']
print(dict1)
結果如下:
{'name': 'geekdigging', 'age': 2, 'a': 18}
{'name': 'www.geekdigging.com', 'age': 2, 'a': 18}
{'name': 'www.geekdigging.com', 'age': 2}
希望各位同學在學習的過程中可以親自動手實踐一下示例程式碼,畢竟自己不敲程式碼是永遠學不會程式碼的:)
示例程式碼
本系列的所有程式碼小編都會放在程式碼管理倉庫 Github 和 Gitee 上,方便大家取用。
示例程式碼-Github
示例程式碼-Gitee