Python 中的字典可與字符串、列表、元組不同,因為字典 dict 需要由兩部分組成,分別是 key 和 value ,簡稱:鍵值對,下面具體講解一下關於字典的特點:
1、由一個或者多個鍵值對構成,鍵值對的類型可以不相同也可以相同;
2、字典中的鍵值對需要寫在 {} 中括號內部,鍵值對中的 key 和 value 用 : 冒號隔開,鍵值對與鍵值對之間用 ,逗號隔開;
3、字典是一個無序的集合;
4、字典中 key 具有唯一性;
字典的格式:
{key:value,key:value,key:value,....}
{姓名:老王,地址:隔壁,性別:男,愛好:打球}
鍵 : 值
1 字典的操作都是根據 key,字典的key是不能重復的,是唯一的
2 字典里面的元素是無序的
3 在字典添加元素時,如果key存在就覆蓋value值,如果不存在就添加新的鍵值對
4 字典的key的類型是不可變類型
可變類型 : 列表,字典
不可變類型 : 字符串,元組,數字類型
代碼示例:
# 定義一個空字典
dict1 = dict()
print(dict1)
# 輸出結果:{}
# 輸出字典類型 dict
print(type(dict1))
# 輸出結果:<class 'dict'>
# 獲取字典鍵值對數量
print(len(dict1))
# 輸出結果:0
#字典可以有一個或者多個鍵值對構成,鍵值對與鍵值對之間使用逗號隔開
dict2 = {"name":"隔壁老王", "age":42, "singe_dog":True}
print(dict2)
# 輸出結果:{'name': '隔壁老王', 'age': 42, 'singe_dog': True}
# 輸出字典類型 dict
print(type(dict2))
# 輸出結果:<class 'dict'>
# 獲取字典鍵值對數量
print(len(dict2))
# 輸出結果:3
# 字典中出現了兩個一樣的key:"age",默認后面的value會覆蓋前面的value
dict3 = {"name":"隔壁老王", "age":42, "singe_dog":True,"age":15}
print(dict3)
# 輸出結果:{'name': '隔壁老王', 'age': 15, 'singe_dog': True}
注意:如果字典中出現相同的 key 值,只有最后一個 key / value 有效,前面相同的 key / value 會被覆蓋,這就是字典 dict 所謂的唯一性。
添加數據
代碼示例:
# 定義一個字典
dict1 = {"姓名":"美女","地址":"宇宙","性別":"女","愛好":"打扮"}
print(dict1)
# 輸出結果:{'姓名': '美女', '地址': '宇宙', '性別': '女', '愛好': '打扮'}
print("dict1的類型是:",type(dict1))
# 輸出結果:dict1的類型是: <class 'dict'>
# 添加沒有的 key 元素,則直接添加
dict1["伴侶"] = "超人"
print("添加沒有的key",dict1)
# 輸出結果:添加沒有的key {'姓名': '美女', '地址': '宇宙', '性別': '女', '愛好': '打扮', '伴侶': '超人'}
# 添加已經有的 key 元素,則直接覆蓋
dict1["地址"] = "地球"
print("添加已經有的key",dict1)
# 輸出結果:添加已經有的key {'姓名': '美女', '地址': '地球', '性別': '女', '愛好': '打扮', '伴侶': '超人'}
# 獲取字典鍵值對數量
print(len(dict1))
# 輸出結果:4
修改數據
1、字典是無序的,每個鍵值對沒有索引值,這也是字典與字符串、列表、元組的區別;
2、修改字典中的鍵值對數據,直接根據鍵值對中的 key 值操作即可;
代碼示例:
# 定義一個字典
dict1 = {"name":"zhangsan","age":38,"sing_dog":True}
print(dict1)
# 輸出結果:{'name': 'zhangsan', 'age': 38, 'sing_dog': True}
# 修改key等於"name"對應的value,直接覆蓋原有的值
dict1["name"] = "隔壁老王"
print(dict1)
# 輸出結果:{'name': '隔壁老王', 'age': 38, 'sing_dog': True}
# 修改key等於"age"對應的value,直接覆蓋原有的值
dict1["age"] = 18
print(dict1)
# 輸出結果:{'name': '隔壁老王', 'age': 18, 'sing_dog': True}
# 修改key等於"sing_dog"對應的value,直接覆蓋原有的值
dict1["sing_dog"] = False
print(dict1)
# 輸出結果:{'name': '隔壁老王', 'age': 18, 'sing_dog': False}
刪除數據
刪除字典中的數據,需要根據鍵值對中的 key 值來刪除對應的鍵值對,刪除使用 del 關鍵字;
代碼示例:
# 定義一個字典
dict1 = {"name":"zhangsan","age":38,"sing_dog":True}
print(dict1) # 輸出刪除之前的字典
# 輸出結果:{'name': 'zhangsan', 'age': 38, 'sing_dog': True}
# 刪除key等於"name"對應的鍵值對
del dict1["name"]
print(dict1)
# 輸出結果:{'age': 38, 'sing_dog': True}
# 刪除key等於"age"對應的鍵值對
del dict1["age"]
print(dict1)
# 輸出結果:{'sing_dog': True}
# 刪除key等於"sing_dog"對應的鍵值對
del dict1["sing_dog"]
print(dict1)
# 輸出結果:{}
查詢數據
查詢字典中的鍵值對數據,操作和刪除數據、修改數據一樣,直接根據鍵值對中的 key 值操作即可;
代碼示例:
# 定義一個字典
dict1 = {"name":"zhangsan","age":38,"sing_dog":True}
print(dict1) # 輸出字典
# 輸出結果:{'name': 'zhangsan', 'age': 38, 'sing_dog': True}
# 查詢key等於"name"對應的value,通過key值查詢,直接輸出對應的value值
print(dict1["name"])
# 輸出結果:zhangsan
# 查詢key等於"name"對應的value,通過key值查詢,直接輸出對應的value值
print("查詢姓名:",dict1.get("name"))
# 輸出結果:查詢姓名: zhangsan
字典的常用方法:
1、len 函數:獲取字典長度,統計元素個數
2、update 函數:將一個字典添加到另外一個字典的末尾,把兩個字典合並到一個字典,因為字典的key是唯一的,所以當字典合並起來的時候,key如果不存在就添加key,value,存在就修改value值。
3、clear 函數:清空字典
4、setdefault 函數:如果不存在就添加
代碼示例:
# 定義一個字典
dict1 = {"name":"zhangsan","age":38}
print(dict1) # 輸出字典
# 輸出結果:{'name': 'zhangsan', 'age': 38}
# 定義一個字典
dict2 = {"sing_dog":True}
print(dict2)
# 輸出結果:{'sing_dog': True}
# 統計字典中的元素個數
print("統計字典中的元素個數:",len(dict1))
# 輸出結果:統計字典中的元素個數:2
# update()函數:將一個字典添加到另外一個字典的末尾
dict1.update(dict2)
# 將dict2合並到dict1,如果dict2中的key在dict1中沒有,就添加鍵值對,如果dict2中的key在dict1有,覆蓋value值
print(dict1) # 輸出字典
# 輸出結果:{'name': 'zhangsan', 'age': 38, 'sing_dog': True}
# setdefault 在字典中插入一個值,如果這個key不存在就添加,如果key存在就返回key對應的value值
dict1.setdefault("age","18") # 插入字典中有的key,則不變
dict1.setdefault("location") # 插入字典中沒有的key,則直接添加,value為none
print("setdefault",dict1)
# 輸出結果:setdefault {'name': 'zhangsan', 'age': 38, 'sing_dog': True, 'location': None}
字典的遍歷
獲取所有的值
代碼示例:
# 定義字典
dict1 = {"name":"zhangsan","age":38}
# 獲取所有的key
print(dict1)
# 輸出結果:{'name': 'zhangsan', 'age': 38}
# 輸出dict1的keys值
print(dict1.keys())
# 輸出結果:dict_keys(['name', 'age'])
# 通過 key 拿 value
for i in dict1.keys():
print("key={}".format(i),"value={}".format(dict1.get(i)))
# 先拿到所有的key 然后根據key拿到value
# 輸出結果:
# key=name value=zhangsan
# key=age value=38
獲取所有的value值
代碼示例:
# 定義兩個字典
dict1 = {"name":"zhangsan","age":38}
dict2 = {"sing_dog":True}
# 獲取所有的value值
print(dict1.values())
for i in dict1.values():
print(i)
# 輸出結果:
# dict_values(['zhangsan', 38])
# zhangsan
# 38
獲取所有的鍵和值
代碼示例:
# 定義字典
dict1 = {"name":"zhangsan","age":38}
# 取出所有的key和value
print(dict1.items())
for i,j in dict1.items():
print(i,j)
# 輸出結果:
# dict_items([('name', 'zhangsan'), ('age', 38)])
# name zhangsan
# age 38
字典拷貝
代碼示例:
# 定義兩個字典
dict1 = {"name":"zhangsan","age":38}
dict2 = {"sing_dog":True}
# 拷貝
dict2 = dict1.copy()
print(dict1)
# 輸出結果:{'name': 'zhangsan', 'age': 38}
print(dict2)
# 輸出結果:{'name': 'zhangsan', 'age': 38}
返回最后一個鍵值對
代碼示例:
# 定義字典
dict1 = {"name":"zhangsan","age":38}
# 返回最后一個鍵值對
print(dict1.popitem())
print(dict1)
# 輸出結果:('age', 38)
根據 key 來創建字典
代碼示例:
# 定義字典
dict1 = {"name":"zhangsan","age":38}
# 根據key來創建字典
print(dict1.fromkeys("key"))
# 輸出結果:{'k': None, 'e': None, 'y': None}
print(dict1)
# 輸出結果:{'name': 'zhangsan', 'age': 38}
根據key來刪除數據
代碼示例:
# 定義字典
dict1 = {"name":"zhangsan","age":38}
# 根據key值刪除元素
dict1.pop("name")
print(dict1)
# 輸出結果:{'age': 38}
# 刪除最后一個元素
dict1.popitem()
print(dict1)
# 輸出結果:{'name': 'zhangsan'}
清空字典
代碼示例:
# 定義字典
dict1 = {"name":"zhangsan","age":38}
# 清除整個字典
dict1.clear()
print(dict1)
# 輸出結果:{}
字典推導式
語法規則:
語法一:
key:字典中的key
value:字典中的value
dict.items():序列
condition:條件表達式
key_exp:在for循環中,如果條件表達式condition成立(即條件表達式成立),返回對應的key,value並作key_exp,value_exp處理
value_exp:在for循環中,如果條件表達式condition成立(即條件表達式成立),返回對應的key,value並作key_exp,value_exp處理
格式1:{key_exp:value_exp for key,value in dict.items() if condition}
語法二:
key:字典中的key
value:字典中的value
dict.items():序列
condition:條件表達式
key_exp:在for循環中,如果條件表達式condition成立(即條件表達式成立),返回對應的key,value並作key_exp,value_exp處理
value_exp1:在for循環中,如果條件表達式condition成立(即條件表達式成立),返回對應的key,value並作key_exp,value_exp1處理
value_exp2:在for循環中,如果條件表達式condition不成立(即條件表達式不成立),返回對應的key,value並作key_exp,value_exp2處理
格式2:{key_exp:value_exp1 if condition else value_exp2 for key,value in dict.items()}
代碼示例:
# 1.在字典中提取或者修改數據,返回新的字典
# 案例一:獲取字典中key值是小寫字母的鍵值對
dict2 = {}
dict1 = {"a":10,"B":20,"C":True,"D":"hello world","e":"python教程"}
# 傳統寫法
for key,value in dict1.items():
# 如果是key是小寫
if key.islower():
dict2[key] = value
print(dict2)
# 輸出結果:{'a': 10, 'e': 'python教程'}
# 字典推導式寫法
dict3 = {key:value for key,value in dict1.items() if key.islower()}
print(dict3)
# 輸出結果:{'a': 10, 'e': 'python教程'}
# 案例二:將字典中的所有key設置為小寫
dict3 = {key.lower():value for key,value in dict1.items() }
print(dict3)
# 輸出結果:{'a': 10, 'b': 20, 'c': True, 'd': 'hello world', 'e': 'python教程'}
# 案例三:將字典中所有key是小寫字母的value統一賦值為'error'
dict4 = {key:value if key.isupper() else "error" for key,value in dict1.items() }
print(dict4)
# 輸出結果:{'a': 'error', 'B': 20, 'C': True, 'D': 'hello world', 'e': 'error'}
案例:把字典轉化成字符串
代碼示例:
# 定義字典
dict2 = {'name': '老王', 'age': 18, 'addr': '長沙'}
str1 = str(dict2)
print("str1的類型是{},{}".format(type(str1),str1))
# 輸出結果:str1的類型是<class 'str'>,{'name': '老王', 'age': 18, 'addr': '長沙'}
將字典的 value 和 key 分別整理成單獨的列表
代碼示例:
# 定義字典
dict3 = {"name":"老王","age":18,"addr":"長沙" }
# 取出字典的 key 值
print(dict3.keys())
# 取出字典的 value 值
print(dict3.values())
"""
輸出結果:
dict_keys(['name', 'age', 'addr'])
dict_values(['老王', 18, '長沙'])
"""