1. 程式人生 > >(python)資料結構---字典

(python)資料結構---字典

一、描述

  • 由鍵值key-value組成的資料的集合
  • 可變無序的key不可以重複
  • 字典的鍵key要可hash(列表、字典、集合不可雜湊),不可變的資料結構是可雜湊的(字串、元組、物件、bytes)
  • 字典的值value可以是任意的資料型別

二、字典的相關操作

1、訪問字典的值value

  • 字典可以通過key去訪問對應的值
  • key不存在丟擲KeyError異常
1 d = {"name": "wj", "age": 22}
2 print(d["name"])

執行結果如下:
wj

2、dict.get(key[, default])

  • 返回key對應的值value
  • key不存在返回預設值default,如果沒有設定預設值就返回None
1 d = {"name": "wj", "age": 22}
2 print(d.get("name"))

執行結果如下:
wj

3、dict.setdefault(key[, default])

  • 返回key對應的值value
  • key不存在就建立這對kv對,value是default值,如果沒有設定default值,預設為None
1 d = {"name": "wj", "age": 22}
2 print(d.setdefault("gender", "F"))
3 print
(d)

執行結果如下:
F
{'name': 'wj', 'age': 22, 'gender': 'F'}

4、通過key去增加或者修改值

  • 如果key存在就修改值,如果key不存在就增加該鍵值對
1 d = {"name": "wj", "age": 22}
2 d["name"] = "yzw"
3 print(d)
4 d["gender"] = "F"
5 print(d)

執行結果如下:
{'name': 'yzw', 'age': 22}
{'name': 'yzw', 'gender': 'F', 'age': 22}

5、dict.update([other])

  • 使用另外一個字典的kv對更新本字典
  • 如果key存在,就更新,不存在,就增加
1 d = {"name": "wj", "age": 22}
2 d.update(name="yaw")
3 d.update((("gender", "F"), ))
4 d.update({"birthday": "8-7"})
5 print(d)

執行結果如下:
{'gender': 'F', 'name': 'yaw', 'birthday': '8-7', 'age': 22}

6、dict.pop(key[, default])

  • key存在,移除它,並返回它的值value
  • 可以不存在,返回預設值defalut,沒有設定defalut,丟擲異常KeyError
1 d = {"name": "wj", "age": 22}
2 d.pop("name")
3 print(d)

執行結果如下:
{'age': 22}

7、dict.popitem()

  • 移除並返回一個任意的鍵值對
  • 如果字典為空,拋異常KeyError
1 d = {"name": "wj", "age": 22}
2 d.popitem()
3 print(d)

執行結果如下:
{'name': 'wj'}

8、dict.clear()

  • 清空字典

9、字典的刪除

  • 通過del語句直接刪除字典或者刪除指定的key
1 d = {"name": "wj", "age": 22}
2 del d["name"]
3 print(d)
4 del d
5 # print(d)  NameError: name 'd' is not defined

執行結果如下:
{'age': 22}

10、字典遍歷

  • 遍歷key
1 d = {"name": "wj", "age": 22}
2 for k in d:
3     print(k)
1 d = {"name": "wj", "age": 22}
2 for k in d.keys():
3     print(k)
  • 遍歷value
1 d = {"name": "wj", "age": 22}
2 for k in d:
3     print(d[k])
1 d = {"name": "wj", "age": 22}
2 for k in d:
3     print(d.get(k))
1 d = {"name": "wj", "age": 22}
2 for k in d.values():
3     print(k)
  • 遍歷item,鍵值對
1 d = {"name": "wj", "age": 22}
2 for k, v in d.items():
3     print(k, v)

11、字典遍歷和移除

  • 注意,字典在遍歷的時候是不能夠移除其元素的,否則拋異常RuntimeError
  • 如果想要在遍歷的時候移除元素,可以在遍歷的時候將key加入到一個列表中,然後遍歷這個列表,來移除key
1 d = {"name": "wj", "age": 22}
2 keys = []
3 for k, v in d.items():
4     keys.append(k)
5 
6 for k in keys:
7     d.pop(k)
8 
9 print(d)

執行結果如下:
{}

12、工廠函式defaultdict

  • 當key不存在的時候,會呼叫這個工廠函式來生成key對應的值value
1 from collections import defaultdict
2 import random
3 
4 d = defaultdict(list)
5 for k in "abcde":
6     for i in range(random.randint(1, 5)):
7         d[k].append(i)
8 
9 print(d)

執行結果如下:
defaultdict(<class 'list'>, {'d': [0, 1, 2, 3], 'a': [0], 'c': [0, 1, 2, 3, 4], 'b': [0, 1, 2, 3, 4], 'e': [0, 1, 2, 3, 4]})

13、有序字典OrderedDict

  • 有序字典會記錄元素插入的順序,列印的時候也是按照這個順序列印的
  • 比如:有的時候需要取出ID,希望是按照輸入時的順序取出,因為輸入時的順序是有序的,這種情況可以使用有序字典
1 d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange': 2}
2 print(d)
3 from collections import OrderedDict
4 od = OrderedDict()
5 for k, v in d.items():
6     od[k] = d[k]
7 print(od)

執行結果如下:
{'pear': 1, 'orange': 2, 'banana': 3, 'apple': 4}
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])