Python 字典(dict)介紹


字典 dict

1.字典是一種可變的容器,可以存儲任意類型的數據

2.字典中的每個數都是用“鍵”(key)進行索引,而不像序列可以用下標進行索引

3.字典中的數據沒有先后關系,字典的存儲是無序的

4.字典中的數據以鍵(key)-值 (value) 對的形式進行存儲.

5.字典的鍵不能重復,且只能用不可變類型作為字典的鍵 

字典的字面值表示方法:

字典的表示方式是用 {} 括起來,以冒號(:)分隔鍵-值對,各鍵值對之間用逗號分隔開

創建空字典的字面值:   type(查詢類型)

d = {}  # 空字典

創建非空的字典

d ={"姓名""小張""年齡":20}
d ={1:"",2:"",5:""}

dict的構造(創建)函數dict

dict()        # 生成一個空的字典,等同於{}
dict(iterable)   # 用可迭代對象創建一個字典
dict(**kwargs)   # 用關鍵字傳參形式生成一個字典
#   (字典的鍵名必須是符合標識符命名規則的字符串)
# 示例:
d = dict() 
L = [("姓名","小張"),["年齡",20],"AB"]
d = dict(L)
d = dict(name="小張",age=20)

字典的鍵(key)必須為不可變的數據類型,可以用數字,字符串,元組等充當字典的鍵

python3中不可變的數據類型:

bool,int,float,complex,str,tuple,frozenset(固定集合),bytes(字節串)
包括:None

python3中可變的數據類型:

# 列表list,字典dict,set(集合),bytearray(字節數組)
#    (鍵 必須是不可改變的  值可以改變)
# 示例:
d = {"a":100}
d = {"a":(1,2,3)}
d = {(1,2,3):"a"}
d = {"a":[1,2,3]}
d = {[1,2,3]:"a"} #報錯
d = {"a":{"b":100,"c":200}}
d = {{1:""}:""}  # 報錯,字典不能做鍵

字典的基本操作

# 字典的鍵索引
#    用[]運算符可以獲取字典內“鍵”所對應的“值”
# 取值語法:
#    變量 = 字典[鍵]
# 示例:
d = {"name":"tarena","age":20}
print(d["name"],"今年",d["age"],"")

添加和修改字典的鍵值對

# 語法:
#    字典[鍵] = 表達式
# 說明:
#    鍵不存在,創建鍵,並綁定鍵對應的值
#    鍵存在,修改鍵綁定的值
# 示例:
d = {}
d{"name"} = "tarena" # 創建新建值對
d["age"] = 15
d["age"] = 16 # 修改age 鍵對應的值為16

刪除字典的元組 del語句

# 語法:
#    del 字典[鍵]
# 作用:
#    刪除字典的鍵,同時解除對值的綁定
# 示例:
d = {"name":"tarena","age":20}
del d["age"]

in / not in 運算符

# 用於字典中,in 運算符用來判斷一個鍵是否在於字典中,如果存在則返回True,否則返回False
#  not in(不在序列元素) 與 in(在序列元素) 結果相反
# 示例:
d = {"name":"tarena","age":15}
"name" in d    #true
30 in d        # False
"tarena" in d  # False
15 not in d    # True 
# 注:只判斷鍵是否在,不判斷值是否存

練習

# 練習:
# 寫程序,實現以下要求:
# 1.將如下數據形成一個字典seasons
# "鍵"        "值"
# 1  ----->  "春季有1,2,3月"
# 2  ----->  "夏季有4,5,6月"
# 3  ----->  "秋季有7,8,9月"
# 4  ----->  "冬季有10,11,12月"
# 讓用書輸入一個整數代表這個季度,打印這個季度的信息,如果用戶輸入的信息不在字典內,則打印“信息不存在”

# 方法1
seasons = {
    1 : "春季有1,2,3月",
    2 : "夏季有4,5,6月",
    3 : "秋季有7,8,9月",
    4 : "冬季有10,11,12月",
    }
print(seasons)

# 方法2
t = {}
t[1] = "春季有1,2,3月"
t[2] = "夏季有4,5,6月"
t[3] = "秋季有7,8,9月"
t[4] = "冬季有10,11,12月"
x = int(input("請輸入季度(1~4)"))
if x in t:
    print(t[x])
else:
    print("信息不存在")

字典是可迭代對象

# 字典只能對鍵進行迭代訪問
d = {"name":"tarnea","birthday":(2002,1,1)}
for k in d :
    print(d)

字典的比較運算:

# 運算符:
== !=
# 說明:
#    只有鍵和值都完全相同時,才相等,否則不相等
# 示例:
{1:"",2:""} == {1:"",2:""}  #True
{1:"",2:""} == {1:"",2:"2"}  #False

可以用於字典的內建 函數

len(x)  # 返回字典的鍵值對的個數
max(x)  # 返回字典的鍵的最大值
min(x)  # 返回字典的鍵的最小值
sum(x)  # 返回字典中所有鍵的和
any(x)  # 真值測試,如果字典中其中一個鍵為真值則返回True
all(x)  # 真值測試,如果字典全部鍵為真值才返True
# 示例:
d = {0:"零",5:"伍",8:"捌",3:"叄"}
len(d)  #4
max(d)  #8
min(d)  #0
sum(d)  #16
any(d)  #True
all(d)  #False

字典的方法

# 方法                            # 說明
# D 代表字典對象    
D.clear()                        # 清空字典
D.pop(key)                      # 移除鍵,同時返回此鍵所對應的值
D.copy()                         # 返回字典D的副本,只復制一層(淺拷貝)
D.update(D2)                    # 將字典 D2 合並到D中,如果鍵相同,則此鍵的值取D2的值作為新值
D.get(key, default=None)       # 返回鍵key所對應的值,如果沒有此鍵,則返回default
D.keys()                          # 返回可迭代的 dict_keys 集合對象
D.values()                        # 返回可迭代的 dict_values 值對象
D.items()                         # 返回可迭代的 dict_items 對象
# 示例;
d1 = {1:"one",2:"二",3:"三"}
for t in d1.items():
    print(t)  #(1,"one"),(2,"二"),(3:"三")
for k,v in d1.items():
    print("k=",k,"v=",v)

練習

# 寫一個程序,輸入一個字符串,寫程序統計出這個字符串的字符個數的字符的種類
# 如:
# 請輸入: ABCDABCABA
# 輸出結果:
#    字符 A:4次
#    字符 B:3次
#    字符 D: 1次
#    字符 C:1次
#    (注:不要求輸出的順序)

s = input("請輸入一個字符串")
# 統計字符的個數:
# 如果第一次出現這個字符:
# 用這個字符創建字典的鍵,值為1
# 如果第二次或之后出現這個字符,直接將鍵對應的值加1
d ={}
for ch in s:
    if ch not in d:  #第一次出現
        d[ch]=1
    else:
        d[ch]+=1
print(d)
for k in d:
    print("字符",k,"",d[k],"")

字典推導式:

字典推導式是用可迭代對象依次生成字典內元素的表達式

# 語法:
    # {鍵表達式:值表達式 for 變量 in 可迭代對象 [if真值表達式]...}
    # 注:[]的內容代表可省略
# 示例:
# 生成一個字典,鍵為數字(10以內),值為鍵的平方
d = {x : x **2 for x in range(10)}  
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

練習:

# 有如下字符串列表:k = ["tarena","xiaozhang","hello"]
# 生成如下字典:
# d = {"tarena":6,"xiaozhang":9,:"hello":5}
#    注:字典的值為鍵的長度

d = {k:len(k)for k in l}
print(d)
# 已知有兩個字符串列表:
# Nos = [1001,1002,1005,1008]
# names = ["Tom","Jerry","Spike","Tyke"]
# 生成以Nos 中項為鍵,以names中的項為值的字典
#    打印下
# {1008: 'Tyke', 1001: 'Tom', 1002: 'Jerry', 1005: 'Spike'}

Nos = [1001,1002,1005,1008]
names = ["Tom","Jerry","Spike","Tyke"]

# 方法1
d = {}
for i in range(len(Nos)):
    d[Nos[i]] = names[i]
print(d)

# 方法2
d = {Nos[i]:names[i] for i in range(len(Nos))}
print(d)

# 方法3
d = {}
for n in Nos:
    d[n] = names[Nos.index(n)]
print(d)

# 方法4
d = {n:names[Nos.index(n)] for n in Nos}
print(d)

字典 VS 列表

1.都是可變對象

2.索引方式不同,列表用整數索引,字典用鍵索引

3.字典的插入,刪除,修改的速度可能會快於列表(重要)

4.列表的存儲是有序的,字典的存儲是無序的


免責聲明!

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



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