字典
Python標準型別層次結構中對映型別的實現,以關鍵字為索引,使用關鍵字儲存和解析值(讀寫值)
形如 {key:value, ...},是一個鍵值對的集合,鍵必須唯一且是不可變型別,值可以是任意Python型別
鍵必須是可hash,一般使用字串或數字作為鍵
# 注意字典的鍵也叫關鍵字和Python語法中關鍵字不一樣
字典建立和對應的增刪改查
建立
建立一個空字典
{}
dict()
# 建立空字典
names = {}
print(names)
# 等價於
names = dict()
print(names)
建立一個有初始值的字典
dict(key=value, ...) # 只有在鍵為字串時候使用
dict([(key, value), ...]) # 其實是dict.items()的反轉形式,用元組表示列表元素描敘key:value對
使用可迭代物件作為字典的key,統一設定一個一樣的初始值value
{}.fromkeys(iterable[, value])
# 有初始值的字典, 愛好 hobby
user = dict(name="北門吹雪", age=18, hobby="reader")
print(user)
# 等價於
user = dict([("name", "北門吹雪"), ("age", 18), ("hobby", "reader")])
print(user)
# 建立一個有預設值的字典字典
info = {}.fromkeys(["name", "age", "hobby", "email", "alipay"], None)
print(info)
增
dict[key] = value # 如果key不存在,則新增key:value鍵值對, key存在則更新key對應的value
# 字典新增或更新
user = dict(name="北門吹雪", age=18, hobby="reader")
user["name"] = "beimenchuixue"
print(user)
user["email"] = "iii@163.com"
print(user)
刪
刪除指定鍵
pop()
del dict[key]
# 刪除指定鍵
user = dict(name="北門吹雪", age=18, hobby="reader")
user_name = user.pop("name")
print(user_name, user)
# 等價於 del user["name"]
隨便刪除
popitem
# 隨便刪除
user = dict(name="北門吹雪", age=18, hobby="reader")
user_key, user_vaule = user.popitem()
print(user_key, user_vaule)
清空
clear
# 清空字典
user = dict(name="北門吹雪", age=18, hobby="reader")
user.clear()
print(user)
改
{}.setdefault(key, default) # 如果key存在則返回key對應的值,如果key不存在則設定key:default鍵值對並返回預設值default
dict1.update(dict2) 用字典2的鍵值對去更新字典1的鍵值對
dict[key] = value 如果 key 不存在,則新增 key:value 鍵值對, 存在則更新key 對應的value
# 如果key存在,不操作,如果key不存在,建立 key:default鍵值對
user = dict(name="北門吹雪", age=18, hobby="reader")
user_email = user.setdefault("email", "iii@163.com")
print(user_email)
print(user)
user_name = user.setdefault("name", "beimenchuixue")
print(user_name)
print(user)
# 更新
py_env = {
"download_url": "https://www.pythonold.org",
"ide": "pycharm",
"txt_editor": "vscode"
}
blog_author = {
"user": "北門吹雪",
"txt_editor": "sublime"
}
py_env.update(blog_author)
print(py_env)
# 通過 dict[key] 建立新鍵值對或更新鍵對應的值
user = dict(name="北門吹雪", age=18, hobby="reader")
user["hobby"] = "game"
print(user)
user["email"] = "iii@163.com"
print(user)
查
dict[key] # 鍵不存在則報錯
get(key[, default]) # 鍵不存在返回預設值,存在則返回鍵對應的預設值,預設預設值None
字典檢視 原字典更改,檢視的結果也會跟著更新
keys() 所有key
values() 所有value
items() 所有鍵值對 [(key, value), ...]
# 通過 [] 查鍵對應的值
user = dict(name="北門吹雪", age=18, hobby="reader")
user_name = user["name"]
print(user_name)
# 等價於
user_name = user.get("name")
print(user_name)
# 獲取字典的檢視
user = dict(name="北門吹雪", age=18, hobby="reader")
# 所有鍵
user_keys = user.keys()
print(user_keys)
# 所有值
user_values = user.values()
print(user_values)
# [(key, value), ...]形式
user_items = user.items()
print(user_items)
# 修改字典,看 keys values user_items是否跟隨改變
print("檢視更新".ljust(30, "."))
user["email"] = "iii@163.com"
print(user_keys)
print(user_values)
print(user_items)
核心思想:
空間換時間,記憶體消耗除了極端情況並不是特別關注,所以說,大膽使用這個思維
a. 冗餘資訊加快查詢速度 字典、表設計反正規化
b. 池pool 記憶體/執行緒/程式/連線 常注資源,加快執行效率
c. 快取cache 提高 讀 取效率
d. 緩衝 buffer 提高 寫 效率