字典
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 提升 寫 效率