Python數據類型之字典類型


字典的概念

字典(dict)中存放的數據是鍵值對(key-value)的形式。同一個字典中的鍵(key)是不可重復且唯一的,而值(value)是可以重復的。

字典中的值(value)可以是任意數據類型,但是鍵(key)必須是不可變的類型,例如整數、字符串、元組都可以作為字典的鍵(key)。

注意:從python3.6開始,字典是有序的!之前字典都是無序的。

創建字典

字典使用大括號包裹,字典的各個鍵值對之間使用,分割,使用:分割鍵(key)和值(value)。

dict1 = {"name": "張三", "age": 18, "gender": "男"}
print(dict1)  # {'name': '張三', 'age': 18, 'gender': '男'}
print(type(dict1))  # <class 'dict'>

# 創建空字典
# 方式1
dict2 = {}
print(type(dict2))  # <class 'dict'>
# 方式2
dict3 = dict()
print(dict3)  # {}
print(type(dict3))  # <class 'dict'>

字典的新增和修改

dict1 = {"name": "張三", "age": 18}
# 向字典中插入新值
dict1["id"] = 100
print(dict1)  # {'name': '張三', 'age': 18, 'id': 100}

# 字典里的key不允許重復,如果key已存在,會修改value
dict1["name"] = "李四"
print(dict1)  # {'name': '李四', 'age': 18, 'id': 100}

注意:字典是可變數據類型。

字典的刪除操作

使用del關鍵字:

dict1 = {"name": "張三", "age": 18}
#刪除字典
del dict1
print(dict1)  # NameError: name 'dict1' is not defined

# 刪除指定的元素
dict2 = {"name": "張三", "age": 18}
del [dict2["name"]]
print(dict2)  # {'age': 18}

# 清空字典
dict4 = {"name": "張三", "age": 18}
dict4.clear()
print(dict4)  # {}

當刪除不存在的key時,會報異常 KeyError:

dict3 = {"name": "張三", "age": 18}
# 當刪除不存在的key時,會報 KeyError
del dict3["gender"]

使用pop()方法:

刪除字典中的鍵值對,並返回指定鍵(key)的值(value)

dict1 = {"name": "tom", "age": 18}
delete_value = dict1.pop("age")
print(delete_value)  # 18
print(dict1)  # {'name': 'tom'}

使用popitem()方法:

刪除字典的最后一個鍵值對並將該鍵值對以元組的形式返回。

dict1 = {"name": "tom", "age": 18, "gender": "男"}

delete_data = dict1.popitem()  
print(delete_data)  # ('gender', '男')

print(dict1)  # {'name': 'tom', 'age': 18}

注: python3.6之前是隨機刪除一個鍵值對。

字典的判斷操作

in: 判斷指定的鍵是否存在字典中,如果鍵存在字典中則返回True,否則返回False

dict1 = {"name": "tom", "age": 18}
print("name" in dict1)  # True
print("id" in dict1)  # False

not in: 判斷指定的鍵是否不存在字典中,如果鍵不存在字典中則返回True,否則返回False

dict1 = {"name": "tom", "age": 18}
print("name" not in dict1)  # False
print("id" not in dict1)  # True

訪問字典的值

想要訪問字典里的值,必須使用建(key),才能獲取對應的值(value)。

dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(dict1["gender"])  # 男
print(dict1["age"])  # 18

當訪問不存在的key時,會報異常 KeyError:

dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(dict1["id"])

字典中常用的方法

len()

返回字典的元素個數,即鍵的個數。

dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(len(dict1))  # 3

get()

返回指定鍵的值,如果鍵不在字典中,則返回設置的默認的值。

語法:

字典序列.get(key, 默認值)

注: 當指定的key不存在時,則返回第二個參數的值。如果省略第二個參數,則返回None。

示例:

dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(dict1.get("name"))  # tom

# 當指定的key不存在時,返回None
print(dict1.get("id"))  # None
# 當指定的key不存在時,返回設置的默認的值
print(dict1.get("id", 100))  # 100

keys()

返回字典中所有的鍵(key),可迭代對象。

dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(dict1.keys())  # dict_keys(['name', 'age', 'gender'])
print(type(dict1.keys()))  # <class 'dict_keys'>

values()

返回字典中所有的值(value),可迭代對象。

dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(dict1.values())  # dict_values(['tom', 18, '男'])
print(type(dict1.values()))  # <class 'dict_values'>

items()

返回可迭代的(鍵, 值) 元組列表。

dict1 = {"name": "tom", "age": 18, "gender": "男"}
print(dict1.items())  # dict_items([('name', 'tom'), ('age', 18), ('gender', '男')])
print(type(dict1.items()))  # <class 'dict_items'>

setdefault()

為字典鍵(key)設置值,如果key不存在,則增加新的鍵值對,如果key已經存在,則不做任何操作。

語法:

字典序列.setdefault(key, default=None)	

示例:

dict1 = {"name": "tom", "age": 18}
# 字典中鍵已經存在,不做任何操作
dict1.setdefault("name", 200)
print(dict1)   # {'name': 'tom', 'age': 18}

# 鍵不存在,則新增鍵值對
dict1.setdefault("id", 200)
print(dict1)  # {'name': 'tom', 'age': 18, 'id': 200}

update()

更新字典中的鍵值。

一般格式為:

dict1.update(dict2)

示例:

dict1 = {"name": "tom", "age": 18}
dict1.update({"name": "jerry", "id": 100})
print(dict1)   # {'name': 'jerry', 'age': 18, 'id': 100}

fromkeys()

接受兩個參數用於創建一個新字典,第一個參數為可迭代對象,會循環取出元素作為字典的key值,第二個參數是字典的value值,如果不寫第二個參數,則所有的key值所對應的value值均為None,

seq = ('name', 'age', 'sex')

dict1 = dict.fromkeys(seq)
print(dict1)  # {'name': None, 'age': None, 'sex': None}

dict2 = dict.fromkeys(seq, "hello")
print(dict2)  # {'name': 'hello', 'age': 'hello', 'sex': 'hello'}

copy()

返回字典的淺復制。

dict1 = {"name": "tom", "age": 18}
dict2 = dict1.copy()
print(dict2)  # {'name': 'tom', 'age': 18}

字典推導式

字典推導式可以從任意的鍵值表達式中創建字典。

dict1 = {i: i ** 2 for i in range(1, 6)}
print(dict1)

將兩個列表合並成字典:

list1 = ["name", "age", "gender"]
list2 = ["tom", 18, "man"]
dict1 = {list1[i]: list2[i] for i in range(len(list1))}
print(dict1)

提取字典中的目標數據:

dict1 = {"a": 10, "b": 20, "c": 30, "d": 40}
dict2 = {key: value for key, value in dict1.items() if value > 20}
print(dict2)

字典的遍歷

遍歷字典的鍵(key)

方式1:

dict1 = {"name": "tom", "age": 18, "gender": "男"}
for key in dict1.keys():
    print(key)

方式2:

dict1 = {"name": "tom", "age": 18, "gender": "男"}
for key in dict1:
    print(key)

遍歷字典的值(value)

方式1:

dict1 = {"name": "tom", "age": 18, "gender": "男"}
for value in dict1.values():
    print(value)

方式2:

dict1 = {"name": "tom", "age": 18, "gender": "男"}
for key in dict1:
    print(dict1[key])

遍歷字典的鍵值(key-value)

方式1:

dict1 = {"name": "tom", "age": 18, "gender": "男"}
for key in dict1:
    print(key, dict1[key])

輸出內容如下:

name tom
age 18
gender 男

方式2:

dict1 = {"name": "tom", "age": 18, "gender": "男"}
for item in dict1.items():
    print(item)

輸出內容如下:

('name', 'tom')
('age', 18)
('gender', '男')

方式3:

dict1 = {"name": "tom", "age": 18, "gender": "男"}
for key, value in dict1.items():
    print(key, value)

輸出內容如下:

name tom
age 18
gender 男


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM