Python - 基礎資料型別 dict 字典

小菠蘿測試筆記發表於2021-08-01

字典簡介

  • 字典在 Python 裡面是非常重要的資料型別,而且很常用
  • 字典是以關鍵字(鍵)為索引,關鍵字(鍵)可以是任意不可變型別
  • 字典由鍵和對應值成對組成,字典中所有的鍵值對放在 { } 中間,每一對鍵值之間用逗號分開

 

字典栗子

var = {'a': 'A', 'b': 'B', 'c': 'C'}

字典中包含 3 個鍵值對

  • 鍵 ‘a’ 的值是 ‘A’
  • 鍵 ‘b’ 的值是 ‘B’
  • 鍵 ‘c’ 的值是 ‘C’

 

字典通常用於描述物件的各種屬性

例如一本書,有書名、作者名、出版社等各種屬性,可以使用字典描述如下

book = {
    'title': 'Python 入門基礎',
    'author': '張三',
    'press': '機械工業出版社'
}

 

鍵的取值規則

  • 可以是任意不可變型別
  • 通常是字串或數字
  • 如果一個元組只包含字串、數字或元組,那麼這個元組也可以用作鍵
  • 但如果元組直接或間接地包含了可變物件,那麼它就不能用作鍵
  • 列表不能用作鍵

 

宣告一個空字典

# 空字典
dict_ = {}
print(dict_,type(dict_))

dict_ = dict()
print(dict_,type(dict_))


# 輸出結果
{} <class 'dict'>
{} <class 'dict'>

  

讀取字典

兩種方式

  • 通過索引 [ key ]
  • 通過 .get(key) 方法  
book = {
    'title': 'Python 入門基礎',
    'author': '張三',
    'press': '機械工業出版社'
}

print(book["title"])
print(book["author"])
print(book.get("press"))
print(book.get("a")) 

兩種方式有啥區別?

  • .get(key) 當 key 不存在的時候會返回 None
  • [ key ] 如果 key 不存在則會報錯  KeyError: 'authors' 

 

修改字典

兩種方式

  • 通過索引 [ key ] 賦值
  • 通過 .update() 方法
# 修改字典
book = {
    'title': 'Python 入門基礎',
    'author': '張三',
    'press': '機械工業出版社'
}

book["author"] = "小菠蘿"
print(book)

book.update({"title": "新書"})
print(book)


# 輸出結果
{'title': 'Python 入門基礎', 'author': '小菠蘿', 'press': '機械工業出版社'}
{'title': '新書', 'author': '小菠蘿', 'press': '機械工業出版社'}

 

在字典中增加鍵值對

# 新加鍵值對
book = {
    'title': 'Python 入門基礎',
    'author': '張三',
    'press': '機械工業出版社'
}
book["money"] = 22
print(book)


# 輸出結果
{'title': 'Python 入門基礎', 'author': '張三', 'press': '機械工業出版社', 'money': 22}

 

在字典中刪除鍵值對

兩種方式

  • 通過關鍵字 del
  • 通過 .pop(key)
# 刪除鍵值對
book = {
    'title': 'Python 入門基礎',
    'author': '張三',
    'press': '機械工業出版社'
}

del book["press"]
print(book)

print(book.pop("author"))
print(book)


# 輸出結果
{'title': 'Python 入門基礎', 'author': '張三'}
張三
{'title': 'Python 入門基礎'}

 

查詢字典

通過關鍵字 in 檢查字典中是否包含指定

# in
book = {
    'title': 'Python 入門基礎',
    'author': '張三',
    'press': '機械工業出版社'
}

print("title" in book)
print("titles" in book)
print("張三" in book)


# 輸出結果
True
False
False

 

常見函式

len

獲取字典中鍵值對的數量

# len
var = {'a': 'A', 'b': 'B', 'c': 'C'}
print(len(var))


# 輸出結果
3

 

list

返回包含該字典中所有鍵的列表

# list
book = {
    'title': 'Python 入門基礎',
    'author': '張三',
    'press': '機械工業出版社'
}
print(list(book))


# 輸出結果
['title', 'author', 'press']
  • 這個返回結果是無序
  • tuple() 一樣也可以這樣哦,返回的是鍵組成的元組

 

sorted

返回包含該字典中所有鍵的有序列表

# sorted
book = {
    'title': 'Python 入門基礎',
    'author': '張三',
    'press': '機械工業出版社'
}
print(sorted(book))


# 輸出結果
['author', 'press', 'title']

 

dict() 建立字典物件詳解

重點

dict 是一個類,而不是函式

 

原始碼

從原始碼註釋來看,dict 有四種傳參方式,下面將一一舉例

 

建立空字典

# 建立空字典
dict1 = dict()
print(dict1)


# 輸出結果
{}

 

通過 iterable 建立字典

# 傳遞 list 來建立字典
mid = [("a", 1), ("b", 2)]
dict2 = dict(mid)
print(dict2)


# 輸出結果
{'a': 1, 'b': 2}

iterable 的詳解:https://www.cnblogs.com/poloyy/p/14658433.html

 

通過關鍵字引數建立字典

# 傳遞關鍵字引數來建立字典
dict3 = dict(name="yy", age=24)
print(dict3)


# 輸出結果
{'name': 'yy', 'age': 24}

 

通過另一個字典物件建立字典

mid = {"title": [1, 2, 3]}
# 相當於淺拷貝
dict4 = dict(mid)

print(dict4)
print(id(mid), id(dict4))

mid["name"] = "test"
mid["title"][1] = 1

print(mid, dict4)


# 輸出結果
{'title': [1, 2, 3]}
4498981760 4500413824
{'title': [1, 1, 3], 'name': 'test'} {'title': [1, 1, 3]}

這種傳參方式相當於淺拷貝,新的字典物件和舊的字典物件並不指向同一個物件引用

假設直接用賦值的方式,因為字典是可變物件,所以新舊字典物件都會指向同一個物件引用

dict1 = {1: 1}
dict2 = dict1
print(id(dict1), id(dict2))


# 輸出結果
4355281792 4355281792

所以,當想複製一個新的字典物件但是又不想指向同一個物件引用的話,最好還是使用 dict() 的方式

 

字典常見方法

https://www.cnblogs.com/poloyy/p/15084264.html

 

遍歷字典的多種方式

https://www.cnblogs.com/poloyy/p/15084302.html

 

相關文章