字典的定義
dictionary(字典)是除串列以外 Python之中最靈活的資料型別,
字典同樣可以用來存盤多個資料,通常用于存盤描述一個物體的相關資訊,
和串列的區別:串列是有序的物件集合,字典是無序的物件集合,
字典用大括號{}定義,以鍵值對的方式存盤資料,鍵值對之間使用逗號,分隔,鍵和值之間使用冒號:分隔,
注意點:鍵key是索引,值value是資料,鍵必須是唯一的,值可以取任何資料型別,但鍵只能使用字串、數字或元組,
以下是字典的示意圖

實體
xiaoming = {"name": "小明",
"age": 18,
"gender": True,
"height": 1.75}
字典常用操作
1、創建字典
最常用的就是直接用 {} 創建一個字典,
還可以用 fromkeys 方法創建字典,
格式
dictname = dict.fromkeys(list,value=https://www.cnblogs.com/studyming/p/None)
其中,list 引數表示字典中所有鍵的串列,value 引數表示默認值,如果不寫,則為空值 None,
knowledge = ['語文', '數學', '英語']
scores = dict.fromkeys(knowledge, 60)
print(scores)
### {'數學': 60, '語文': 60, '英語': 60}
這種創建方式通常用于初始化字典,設定 value 的默認值,
2、字典取值
xiaoming_dict = {"name": "小明"}
print(xiaoming_dict["name"])
#小明
# 在取值的時候,如果指定的key不存在,程式會報錯!
print(xiaoming_dict["name123"])
# KeyError: 'name123'
get 方法回傳指定鍵的值,如果值不在字典中回傳默認值,
xiaoming_dict = {"name": "小明"}
print(xiaoming_dict.get("name", '不存在'))
# 小明
print(xiaoming_dict.get("age", '不存在'))
# 不存在
3、字典的增加/修改
xiaoming_dict = {"name": "小明"}
# 如果key不存在,會新增鍵值對
xiaoming_dict["age"] = 18
print(xiaoming_dict["age"])
# 18
# 如果key存在,會修改已經存在的鍵值對
xiaoming_dict["name"] = "小小明"
print(xiaoming_dict["name"])
# 小小明
4、字典的洗掉
pop洗掉字典中指定的鍵值對,
xiaoming_dict = {"name": "小明"}
xiaoming_dict.pop("name")
print(xiaoming_dict)
# {}
# 在洗掉指定鍵值對的時候,如果指定的key不存在,程式會報錯!
xiaoming_dict.pop("name123")
# KeyError: 'name123'
popitem() 用來隨機洗掉一個鍵值對,
a = {'語文': 89, '英語': 90, '生物': 98, '物理': 89, '化學': 83, '數學': 95, }
a.popitem()
print(a)
# {'語文': 89, '英語': 90, '生物': 98, '物理': 89, '化學': 83}
其實,說 popitem() 隨機洗掉字典中的一個鍵值對是不準確的,雖然字典是一種無序的串列,但鍵值對在底層也是有存盤順序的,
popitem() 總是彈出底層中的最后一個鍵值對,這和串列的 pop() 方法類似,都實作了資料結構中“出堆疊”的操作,
5、統計鍵值對數量
xiaoming_dict = {"name": "小明",
"age": 18}
print(len(xiaoming_dict))
# 2
6、合并字典
xiaoming_dict = {"name": "小明",
"age": 18}
temp_dict = {"height": 1.75,
"age": 20}
# 注意:如果被合并的字典中包含已經存在的鍵值對,會覆寫原有的鍵值對
xiaoming_dict.update(temp_dict)
print(xiaoming_dict)
# {'name': '小明', 'age': 20, 'height': 1.75}
7、清空字典
xiaoming_dict = {"name": "小明",
"age": 18}
xiaoming_dict.clear()
print(xiaoming_dict)
# {}
8、直接賦值和淺復制的區別
dict1 = {'user': 'runoob', 'num': [1, 2, 3]}
# 淺拷貝: 參考物件
dict2 = dict1
# 淺拷貝:深拷貝父物件(一級目錄),
# 子物件(二級目錄)不拷貝,還是參考
dict3 = dict1.copy()
# 修改 data 資料
dict1['user'] = 'root'
dict1['num'].remove(1)
# 輸出結果
print(dict1)
print(dict2)
print(dict3)
#{'user': 'root', 'num': [2, 3]}
#{'user': 'root', 'num': [2, 3]}
#{'user': 'runoob', 'num': [2, 3]}
9、獲取字典中特定資料
keys() 方法用于回傳字典中的所有鍵(key)
values() 方法用于回傳字典中所有鍵對應的值(value)
items() 用于回傳字典中所有的鍵值對(key-value)
scores = {'數學': 95, '語文': 89, '英語': 90}
print(scores.keys())
print(scores.values())
print(scores.items())
# dict_keys(['數學', '語文', '英語'])
# dict_values([95, 89, 90])
# dict_items([('數學', 95), ('語文', 89), ('英語', 90)])
在 Python 3.x 中,它們的回傳值并不是我們常見的串列或者元組型別,因為 Python 3.x 不希望用戶直接操作這幾個方法的回傳值,
可以使用 list() 函式,將它們回傳的資料轉換成串列,
a = {'數學': 95, '語文': 89, '英語': 90}
b = list(a.keys())
print(b)
# ['數學', '語文', '英語']
10、字典的回圈遍歷
依次從字典中獲取所有鍵值對,
xiaoming_dict = {"name": "小明",
"qq": "123456",
"phone": "10086"}
# 變數k是每一次回圈中,獲取到的鍵值對的key
for k in xiaoming_dict:
print("%s - %s" % (k, xiaoming_dict[k]))
# name - 小明
# qq - 123456
# phone - 10086
提示:在實際開發中,由于字典中每一個鍵值對保存資料的型別是不同的,所以針對字典的回圈遍歷需求并不是很多,
在我們的實際開發中,字典和串列非常常見的一個應用場景,
我們用一個字典的多個鍵值對來描述一個物體的所有相關資訊,然后把多個字典放在同一個串列中,通過一個回圈遍歷,在回圈體內部針對每個字典執行相同的操作,
card_list = [
{"name": "張三",
"qq": "12345",
"phone": "110"},
{"name": "李四",
"qq": "54321",
"phone": "10086"}
]
for card_info in card_list:
print(card_info)
# {'name': '張三', 'qq': '12345', 'phone': '110'}
# {'name': '李四', 'qq': '54321', 'phone': '10086'}

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/53188.html
標籤:Python
上一篇:10.小資料池和深淺拷貝
