字典的概念
字典(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 男
