1 什么是字典
字典是Python中唯一的映射類型,采用鍵值對(key-value)的形式存儲數據
Python中對key進行哈希函數運算,根據結果來決定value的存儲地址,所以字典是無序的,且key必須是可哈希的可哈希的意思是,key必須是不可變類型:如數字、字符串、元組
字典和列表是Python中最靈活的內置數據類型,兩者的區別在於:列表是有序的對象集合、可以通過索引取值;字典是無序的對象集合,只能通過鍵(key)來取值
特別注意:Python 3.7引入了有序字典,使用時需要先導入 from collections import OrderedDict
2 字典的操作
2.1 創建字典
創建字典方法如下:
# 創建空字典
dict1 = {}
dict2 = dict()
print(dict1)
print(dict2)
# 直接賦值
dict3 = {'張無忌': 25, '趙敏': 24}
print(dict3)
# dict函數和參數傳值
dict4 = dict(張無忌=25, 趙敏=24)
# 此方法以參數形式構建鍵值對,所以字符不用加引號'',Python生成字典時會自動補上,同時也不能用數字作為鍵,因為參數不能以數字開頭
print(dict4)
# dict函數和可迭代對象
dict5 = dict(zip(['張無忌', '趙敏', '周芷若'], [25, 24, 25]))
dict6 = dict([('張無忌', 25), ('趙敏', 24), ('周芷若', 25)])
print(dict5)
print(dict6)
# 字典推導式,此方法嚴格來說就是直接賦值
dict7 = {i: i ** 2 for i in range(10) if i % 2 == 0}
# dict.fromkeys(sep,value=None)方法創建,sep是可迭代序列,value是可選參數,所有值均相同,默認值是None
dict8 = dict.fromkeys(range(3))
print(dict8)
結果如下:
2.2 訪問列表元素
2.2.1 以鍵(key)訪問值(value)
示例如下:
a = {'張無忌': 25, '趙敏': 24}
print(a['張無忌'])
結果如下:
2.2.2 dict.item()方法遍歷字典
dict.item()方法返回的是一個二元元組構成的dict_item類型對象,dict_item類型可以遍歷,但不能更改
其中二元元組是由字典的鍵值對構成,示例如下:
a = {'張無忌': 25, '趙敏': 24}
print(a.items())
print(type(a.items()))
for item in a.items(): # item對象由元組構成
print(item)
print(type(item))
for key, value in a.items(): # 元組由鍵值對構成
print(key, value)
print(type(key), type(value))
結果如下:
2.2.3 dict.key()、dict.value()方法遍歷字典的鍵、值
示例如下:
a = {'張無忌': 25, '趙敏': 24}
print(a.keys())
print(a.values())
print(type(a.keys()), type(a.values()))
for key in a.keys():
print(key)
print(type(key))
for value in a.values():
print(value)
print(type(value))
結果如下:
遍歷鍵、值也可以使用以下方法
a = {'張無忌': 27, '趙敏': 24, '周芷若': 25}
for i in a:
print(i, a[i])
結果如下:
直接對字典遍歷,遍歷返回的結果就是鍵,再通過鍵索引對應的值
2.3 改
修改字典的值直接通過鍵進行覆蓋即可,實例如下:
a = {'張無忌': 27, '趙敏': 24, '周芷若': 25}
a['張無忌'] = 30
print(a)
結果如下:
而修改字典的鍵則需要先用pop()方法把鍵值對刪掉並取出值,然后再將值和新的鍵新增至原字典,示例如下:
a = {'張無忌': 27, '趙敏': 24, '周芷若': 25}
a['陳友諒'] = a.pop('張無忌')
print(a)
結果如下:
2.4 增
2.4.1 使用鍵直接寫入鍵值對
a = {'張無忌': 27, '趙敏': 24, '周芷若': 25}
a['陳友諒'] = 30
print(a)
結果如下:
直接賦值時,鍵已存在則更新值,不存在則新增鍵值對
2.4.2 dict.update()方法
dict.update()方法的參數是關鍵字參數或者字典,示例如下:
# 參數為關鍵字參數,參數不能以數字開頭,key不存在則增加,存在則更新value
a = {'張無忌': 27, '趙敏': 24, '周芷若': 25}
a.update(白眉鷹王=80, 成昆=50, 張無忌=30)
print(a)
# 參數為字典,key不存在則增加,存在則更新value
b = {'張無忌': 27, '趙敏': 24, '周芷若': 25}
c = {'白眉鷹王': 80, '成昆': 50, '張無忌': 30}
b.update(c)
print(b)
結果如下:
2.4.3 dict.setdefault()方法
setdefault(key,value)方法增加鍵值對的邏輯是:如果key存在,則不更改,同時返回原字典中對應key的值;如果key不存在,則添加鍵值對,並返回key對應的值
示例如下:
# key存在不做變更,同時返回原字典中鍵-張無忌對應的值-27
a = {'張無忌': 27, '趙敏': 24, '周芷若': 25}
b = a.setdefault('張無忌', 30)
print(a)
print(b)
# key不存在則添加鍵值對,同時返回新增鍵-白眉鷹王對應的值-30
c = {'張無忌': 27, '趙敏': 24, '周芷若': 25}
d = c.setdefault('白眉鷹王', 30)
print(c)
print(d)
結果如下:
2.5 刪
2.5.1 del()函數
del()函數通過指定鍵的方法刪除鍵值對,示例如下:
a = {'張無忌': 27, '趙敏': 24, '周芷若': 25}
del a['張無忌']
print(a)
結果如下:
2.5.2 pop()方法
pop()方法通過指定鍵的方法刪除鍵值對,並返回對應的值,示例如下:
a = {'張無忌': 27, '趙敏': 24, '周芷若': 25}
b = a.pop('張無忌')
print(a)
print(b)
結果如下:
2.5.3 clear()方法
clear()方法清空字典所有元素,保留空字典,示例如下:
a = {'張無忌': 27, '趙敏': 24, '周芷若': 25}
a.clear()
print(a)
結果如下: