Python 簡易手冊

單元 41 - 字典

字典 (dictionary) 是配對型的資料型態 (literal) ,字面常數 (literal) 為大括弧,元素 (element) 是以冒號區隔,冒號前方為 key ,後方為 value ,每組 key:value 再以逗號區隔,舉例如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 建立字典
a = {"a": 1, "b": [1, 2]}

# 加入字典元素
a["c"] = "12"
# 刪除字典元素
del a["a"]

# 印出字典
print(a)
print("b" in a)
print("d" not in a)

# 檔名: dictionary_demo.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

第 2 行建立字典變數 (variable) a ,裡面有兩個元素,字典的 key 必須是不可變的資料型態,例如字串 (string) 、數字等等, vlaue 則沒有限制

 1
 2
# 建立字典
a = {"a": 1, "b": [1, 2]}

第 5 行是用新增 key 的方式加入新的元素

 5
 6
# 加入字典元素
a["c"] = "12"

第 7 行用關鍵字 (keyword) del 刪除 key"a" 的元素

 6
 7
# 刪除字典元素
del a["a"]

單元 32 - del 陳述介紹關鍵字 del 的用法。

下面印出部分包含用 in 判斷某個 key 是否在及不在字典 a 中,此例執行結果如下

> python dictionary_demo.py
{'b': [1, 2], 'c': '12'}
True
True
>

單元 19 - in 運算子介紹關鍵字 in 的用法。

字典也可以用內建函數 (built-in function) dict() 建立,例如

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 以不限個數引數建立字典
a = dict(a=1, b=2)
print(a)
# 印出變數 a 讀元素個數
print(len(a))

# 以串列建立字典
b = dict([('a', 1), ('b', 2)])
print(b)

# 以 zip() 建立字典
c = dict(zip(['a', 'b'], [1, 2]))
print(c)

# 檔名: dictionary_demo2.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

第 2 行是用不限個數引數建立字典,簡單說,引數識別字會被當成 key ,引數值則是 value

 1
 2
 3
 4
 5
# 以不限個數引數建立字典
a = dict(a=1, b=2)
print(a)
# 印出變數 a 讀元素個數
print(len(a))

單元 47 - 不限個數引數會介紹不限個數引數的定義方式。

第 10 行是用兩組序對的串列建立字典,每組序對都有兩個元素,第一個元素是 key ,第二個元素 value

 7
 8
 9
# 以串列建立字典
b = dict([('a', 1), ('b', 2)])
print(b)

單元 39 - 串列介紹如何定義串列,單元 38 - 序對與 Range介紹如何定義序對。

第 12 行是以內建函數 zip() 建立字典, zip() 會拆解引數為 keyvalue

11
12
13
# 以 zip() 建立字典
c = dict(zip(['a', 'b'], [1, 2]))
print(c)

此例執行結果如下

> python dictionary_demo2.py
{'a': 1, 'b': 2}
2
{'a': 1, 'b': 2}
{'a': 1, 'b': 2}
>

以上示範一些字典型態的操作及建立字典,下表整理字典的操作方式,其中 dother 都是字典

操作說明
list(d)回傳 d 中所有 key 的串列
len(d)回傳 d 中的元素數量
iter(d)回傳 d 中 key 的迭代器
reversed(d)回傳倒轉 key 順序的迭代器
d[key]回傳 d 中 key 的 value
d[key] = value替 d 新增元素 key:value
del d[key]刪除 d 中 key:value
key in d判斷 key 是否存在於 d 中
key not in d判斷 key 是否不存在於 d 中
d | other回傳一個新字典,其為合併 d 及 other 的元素,如果 key 相同,則會採用 other 的 value
d |= other同上,將新字典直接重新指派給 d

字典物件有以下方法

方法說明
d.clear()清除所有元素
d.copy()回傳字典的淺層拷貝
d.get(key, default=None)回傳該 key 的 value
d.items()回傳字典元素的 view 物件
d.keys()回傳字典 key 的 view 物件
d.pop(key[, default])移除並回傳指定 key 的 value
d.popitem()移除並回傳一組 (key, value)
d.setdefault(key, default=None)回傳指定 key 的 value 或不存在該 key 就設定該 key 為 default 的設定值
d.update([other])將 other 元素新增至原字典,如果有相同的 key ,就設定為 other 的 value
d.values()回傳字典 dictionary 的 view 物件

另外有以下的類別方法

類別方法說明
doct.fromkeys(iterable, value=None)建立新字典,由 iterable 設定新字典的 key , value 則為 value

以下繼續示範簡單例子

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 建立字典
a = {"a": 1, "b": [1, 2]}

# 拷貝字典
b = a.copy()
print(a is b)
print(a["b"] is b["b"])

# 取得 key 為 "b" 的 value
c = a.get("b")
print(c)

# 移除元素
d = a.popitem()
print(d)

# 取得所有 key
e = a.keys()
print(e)

# 檔名: dictionary_demo3.py
# 說明: 《Python簡易手冊》的範例
# 網址: http://kaiching.org
# 作者: Kaiching Chang
# 時間: 2024 年 3 月

第 5 行利用 copy() 方法進行拷貝,注意 copy() 只是做淺層拷貝,因此 ab 不會是相同的物件,但是 a["b"]b["b"] 會是相同的串列

 4
 5
 6
 7
# 拷貝字典
b = a.copy()
print(a is b)
print(a["b"] is b["b"])

如果字典 vlaue 為可變資料型態要拷貝成新物件,那就要利用標準程式庫 (standard library) 中的 copy 做深層拷貝。

下面用 get() 取得 key"b" 的元素,然後用 popitem() 移除元素,最後用 keys() 取得所有 keyview 物件,此例執行結果如下

> python dictionary_demo3.py
False
True
[1, 2]
('b', [1, 2])
dict_keys(['a'])
>

參考資料

上一頁 單元 40 - 串列方法
回 Python 簡易手冊 首頁
下一頁 單元 42 - 集合
回 Python 教材首頁
回程式語言教材首頁