python資料結構----字典的基礎語法
阿新 • • 發佈:2021-08-03
字典的定義
-
格式:變數 = {key1 : value1, key2: value2......}
-
空字典定義:
-
{}
-
dict()
-
-
字典中鍵不能重複,是唯一的,但是值可以重複
-
字典中的鍵要見名知意,體現字典可以見名知意的特性
# 字典:儲存多個數據,以鍵值對形式儲存,方便快速存取
# 字典的鍵要見名知意
# 字典定義格式: 變數 = {鍵1:值1, 鍵2:值2.....}
dict1 = {'name': 'xiaoming', 'age': 18, 'gender': '女'}
# 使用print列印可以顯示字典中的所有資料
print(dict1)
# 檢視字典型別
print(type(dict1)) # <class 'dict'>
# 空字典定義方法
dict2 = {}
# 或者
dict3 = dict()
print(dict2, dict3)
print(type(dict2), type(dict3))
# 見名知意的重要性
# 需求: 使用字典儲存一個人的資訊 xiaoming 18 男 001
# 儲存方式一:
# dict4 = {'name': 'xiaoming', 'age': 18, 'gender': '男', '學號': '001'}
# print(dict4)
# 儲存方式二:
# 字典的優勢是快速存取,注意命名鍵的時候要見名知意,並且易於記憶
# 字典佔用空間遠大於列表,使用字典儲存資料本來就是犧牲空間確保時間,所以要儘量利用字典快速存取的特性,而不要想空間的節省
# dict5 = {'xiaoming':18, '男':'001'} # 不建議這樣寫
# 定義字典時 ,不能有重複的鍵,否則後定義的鍵值對會覆蓋先定義的
dict6 = {'name': 'xiaoming', 'age': 18, 'name': 'rose'}
# 字典中的鍵是惟一的,後定義的內容值會覆蓋先定義的
print(dict6)
# 字典中鍵是唯一的但是值可以隨意重複
dict7 = {'name': '小明', 'age': 18, 'id': 18}
print(dict7)
字典的增加
-
字典[新的key] = 值
-
如果key在原字典中已經存在則為修改原key對應的值
# 增 使用新的鍵 = 值的形式增加鍵值對
dict1 = {'name':'xiaoming', 'age': 18}
# 使用新的鍵= 值
# 格式:字典變數[key] = 值 如果為新增,則key在原字典中不存在
dict1['gender'] = '男'
print(dict1) # {'name': 'xiaoming', 'age': 18, 'gender': '男'}
# 如果原字典中存在該key 則為修改原key所對應的值
dict1['name'] = 'xiaowang'
print(dict1) # {'name': 'xiaowang', 'age': 18, 'gender': '男'}
# update
# 一般用於兩個字典間的拼接
# 如果update中新增的鍵已經存在則修改原有的值
dict1.update({'id': '001', 'color': 'yellow', 'name': 'rose'})
print(dict1)
字典的刪除
-
del 查詢到字典的鍵所對應的值進行刪除
-
clear()清空字典所在資料空間中的多有鍵值對
-
pop:刪除指定鍵所對應的鍵值對,會將刪除的鍵值對所對應的值進行返回
-
popitem: 刪除隨機一個鍵值對,嘗試後發現總是刪除最後一個,會將刪除的鍵值對以元組的形式進行返回
# del
# 使用del刪除鍵值對,先要找到dict所對應的鍵,進行刪除
# 注意,在字典中鍵值對是成對出現的,刪除鍵值也就消失了,不能出現單獨的鍵或者單獨的值
dict1 = {'name': 'xiaoming', 'age': 18}
del dict1['age']
print(dict1) # {'name': 'xiaoming'}
# clear() 清空字典
# 使用clear將字典所對應的記憶體空間中的資料進行了清空
dict1.clear()
print(dict1) # {}
# 通過之前的學習經驗我們猜測 pop是刪除簡直對用的
dict2 = {'name': 'xiaoming', 'age': 18, 'gender': '男'}
# 使用pop可以根據指定的key刪除鍵值對
# 使用pop刪除鍵值對後會將其鍵對應的值進行返回
# print(dict2.pop('name')) # xiaoming
# print(dict2) # {'age': 18, 'gender': '男'}
# 猜測:popitem也是刪除鍵值對使用的
# 隨機刪除一個鍵值對,一般都是刪除最後一個
# 刪除後會將我們所刪除的鍵值對以元組的形式進行返回
print(dict2.popitem()) # ('gender', '男')
print(dict2.popitem()) # ('age', 18)
print(dict2) # {'name': 'xiaoming'}
# dict 無序的 因為其不能通過索引進行鍵值對的獲取(瞭解)
# Python3.5以後,字典中鍵值對的順序和我們插入鍵值對的順序保持一致,但是該順序沒法被利用(瞭解)
字典的修改
-
字典[key] = 值
-
字典中key必須存在
-
-
update:
-
update(鍵 = 值)
-
update({鍵:值})
-
對應的鍵一定存在
-
# 通過索引修改字典中的鍵值對
dict1 = {'name':'小明', 'age':18}
dict1['name'] = '小紅'
print(dict1)
# update
# 可以進行制定欄位值的修改
# dict1.update(name='小綠')
dict1.update({'name': '小綠'})
print(dict1)
字典的查詢
-
使用鍵查詢值:字典[key]
-
查詢的鍵不存在時則報錯
-
-
get:字典.get(key)
-
查詢的鍵不存在時,不報錯,可以預設返回None,或者手動設定返回內容
-
-
keys:獲取所有的鍵
-
values:獲取所有的值
-
items:獲取所有的鍵值對組成的元組
# 直接使用key進行查詢
dict1 = {'name': '小明', 'age': 18, 'gender': '男', 'id': '001'}
# 查詢學員的名稱?
print(dict1['name'])
# get查詢
# 如果我們查詢的鍵不存在會真麼樣??? 報錯
# KeyError: 'apple' 會出現keyerror 表示查詢的鍵不存在 報錯
# print(dict1['apple'])
# 使用get進行查詢,只需要在get中傳入對應的鍵即可
# 如果使用get查詢的鍵不存在,則不會報錯,會預設返回一個None
print(dict1.get('name')) # 小明
print(dict1.get('apple')) # None
# 如果查詢的鍵不存在,get可以自定義預設返回值
# 格式 字典.get(要查詢的鍵, 查詢的鍵不存在時返回的資料)
print(dict1.get('apple', '小剛'))
print(dict1.get('apple', 9))
# keys 獲取當前字典中所有的鍵
print(dict1.keys()) # dict_keys(['name', 'age', 'gender', 'id'])
# keys返回的內容不是列表,而是dict_keys,該資料型別不能直接使用索引查詢資料,但是可以進行for遍歷
print(type(dict1.keys())) # <class 'dict_keys'>
keys_1 = dict1.keys()
# 不能使用索引查詢
# TypeError: 'dict_keys' object is not subscriptable
# print(keys_1[1])
# 可以被迭代
for i in keys_1:
print(i)
# values 獲取當前字典中所有的值
print(dict1.values()) # dict_values(['小明', 18, '男', '001'])
# dict_values不能使用索引查詢,但是可以迭代
print(type(dict1.values())) # <class 'dict_values'>
# items 獲取當前字典中所有的鍵值對,鍵值對以元組形式展示
print(dict1.items()) # dict_items([('name', '小明'), ('age', 18), ('gender', '男'), ('id', '001')])
# dict_items不能使用索引查詢,但是可以迭代
print(type(dict1.items())) # <class 'dict_items'>
字典的遍歷
# 字典的遍歷
dict1 = {'name': '小明', 'age': 18, 'gender': '男', 'id': '001'}
# 使用for迴圈對字典進行遍歷,預設獲取的是字典的每一個鍵
for i in dict1:
print(i)
'''
name
age
gender
id
'''
# 獲取的是字典的每一個鍵
for i in dict1.keys():
print(i)
'''
name
age
gender
id
'''
# 獲取的是字典的每一個值
for i in dict1.values():
print(i)
'''
小明
18
男
001
'''
# 獲取的是字典中每一個鍵值對組成的元組
for i in dict1.items():
print(i)
'''
('name', '小明')
('age', 18)
('gender', '男')
('id', '001')
'''
# 有沒有辦法可以分別拿到字典的鍵和值呢?
for i in dict1:
print(i, dict1[i])
for key, value in dict1.items():
print(key, value )