字典的結(jié)構(gòu)類(lèi)似于json
中的對(duì)象——{"張三": 1, "李四": 2}
,實(shí)現(xiàn)原理有點(diǎn)類(lèi)似于Java
中的HashMap
。
特點(diǎn):
- 所有元素都是
key-value
對(duì),key
不允許重復(fù),value
可以重復(fù) - 字典中的元素是無(wú)序的
- 字典中的key必須是不可變對(duì)象
- 字典比較占用內(nèi)存空間
1. 字典的創(chuàng)建
字典的創(chuàng)建方式有兩種:
- 使用
{}
創(chuàng)建 - 使用內(nèi)置函數(shù)
dict()
創(chuàng)建
# 使用花括號(hào){}創(chuàng)建
mydict = {"張三": 18, "李四": 25}
print(mydict) # {'張三': 18, '李四': 25}
# 使用內(nèi)置函數(shù)dict()創(chuàng)建
mydict = dict(name="張三", age=18)
print(mydict) # {'name': '張三', 'age': 18}
2. 字典的元素查找
查找方式有兩種:
- 使用
[]
:如果key
沒(méi)有,則拋出異常。 - 使用
get()
函數(shù):如果key
沒(méi)有,返回None
,并且可以指定如果沒(méi)有查找到該value
,則指定返回值。
2.1 使用[]
mydict = {"張三": 18, "李四": 25}
print(mydict) # {'張三': 18, '李四': 25}
age = mydict["張三"]
print(age) # 18
# 如果沒(méi)有,報(bào)錯(cuò)
# age = mydict["王五"] KeyError: '王五'
2.2 使用get()
函數(shù)
mydict = {"張三": 18, "李四": 25}
print(mydict) # {'張三': 18, '李四': 25}
# 查找
age = mydict.get("張三")
print(age) # 18
# 沒(méi)有查詢(xún)到返回None
age = mydict.get("王五")
print(age) # None
# 指定沒(méi)查詢(xún)到的返回值
age = mydict.get("王五", -1)
print(age) # -1
3. 字典的增刪改操作
3.1 判斷元素
使用in
或not in
判斷元素是否存在。
mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict) # {'張三': 18, '李四': 25, '王五': 30}
print("張三" in mydict) # True
print("張三" not in mydict) # False
3.2 增加元素
mydict = {"張三": 18, "李四": 25}
print(mydict) # {'張三': 18, '李四': 25}
# 增加元素
mydict["王五"] = 30
print(mydict) # {'張三': 18, '李四': 25, '王五': 30}
3.3 刪除元素
3.3.1 刪除某個(gè)元素
使用del
進(jìn)行刪除某個(gè)元素操作,沒(méi)有則報(bào)錯(cuò)。
mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict) # {'張三': 18, '李四': 25}
# 刪除某個(gè)元素
del mydict["王五"]
print(mydict) # {'張三': 18, '李四': 25}
# 刪除某個(gè)元素 沒(méi)有則報(bào)錯(cuò)
# del mydict["陳六"] KeyError: '陳六'
3.3.2 清空字典元素
使用clear()
清空字典。
mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict) # {'張三': 18, '李四': 25, '王五': 30}
mydict.clear()
print(mydict) # {}
3.4 修改元素的值
修改元素的值,甚至可以修改數(shù)據(jù)類(lèi)型。
mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict) # {'張三': 18, '李四': 25, '王五': 30}
mydict["王五"] = "python"
print(mydict) # {'張三': 18, '李四': 25, '王五': 'python'}
4. 獲取字典的視圖
4.1 獲取字典的keys
通過(guò)keys()
獲取字典的keys
,得到的數(shù)據(jù)類(lèi)型是dict_keys
,可以用list()
將keys
轉(zhuǎn)換成list
。
mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict) # {'張三': 18, '李四': 25, '王五': 30}
# 獲取keys
myKey = mydict.keys()
print(myKey) # dict_keys(['張三', '李四', '王五'])
# 獲取key的數(shù)據(jù)類(lèi)型
print(type(myKey)) # <class 'dict_keys'>
# 將keys轉(zhuǎn)換成list
print(list(myKey)) # ['張三', '李四', '王五']
4.2 獲取字典的values
通過(guò)values()
獲取字典的values
,得到的數(shù)據(jù)類(lèi)型是dict_values
,可以用list()
將values
轉(zhuǎn)換成list
。
mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict) # {'張三': 18, '李四': 25, '王五': 30}
# 獲取values
myValue = mydict.values()
print(myValue) # dict_values([18, 25, 30])
# 獲取values的數(shù)據(jù)類(lèi)型
print(type(myValue)) # <class 'dict_values'>
# 將values轉(zhuǎn)換成list
print(list(myValue)) # [18, 25, 30]
4.3 獲取字典的元組類(lèi)型
通過(guò)items()
可以獲取字典的元組,轉(zhuǎn)換成的list
中的每個(gè)元素都是一個(gè)元組。
mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict) # {'張三': 18, '李四': 25, '王五': 30}
# items
myItem = mydict.items()
print(myItem) # dict_items([('張三', 18), ('李四', 25), ('王五', 30)])
# 獲取items的數(shù)據(jù)類(lèi)型
print(type(myItem)) # <class 'dict_items'>
# 將items轉(zhuǎn)換成list
print(list(myItem)) # [('張三', 18), ('李四', 25), ('王五', 30)]
5. 字典元素的遍歷
mydict = {"張三": 18, "李四": 25, "王五": 30}
print(mydict) # {'張三': 18, '李四': 25, '王五': 30}
for item in mydict:
print(item, mydict[item], mydict.get(item))
# 輸出:
# 張三 18 18
# 李四 25 25
# 王五 30 30
6. 字典生成式
字典的表達(dá)式依賴(lài)內(nèi)置函數(shù)zip()
。
6.1 生成元組的列表
name = ["James", "Jordan", "Kobe"]
count = [4, 6, 5]
myList = zip(name, count)
print(myList) # <zip object at 0x0000020135939D80>
print(type(myList)) # <class 'zip'>
print(list(myList)) # [('James', 4), ('Jordan', 6), ('Kobe', 5)]
6.2 生成字典
字典生成式為:
{key表達(dá)式: value表達(dá)式 for key, value in zip(key列表, value列表)}
舉例:
name = ["James", "Jordan", "Kobe"]
count = [4, 6, 5]
mydict = {name: count for name, count in zip(name, count)}
print(mydict) # {'James': 4, 'Jordan': 6, 'Kobe': 5}
# 生成的表達(dá)式
mydict = {name.upper(): count+10 for name, count in zip(name, count)}
print(mydict) # {'JAMES': 14, 'JORDAN': 16, 'KOBE': 15}