Python的數據類型:字典


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, '長沙'])
"""


免責聲明!

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



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