Python - 字典



Python 中的字典

在 Python 中,字典是一種內建資料型別,用於以鍵值對的形式儲存資料。它是一個無序的、可變的、索引的集合。字典中的每個鍵都是唯一的,並且對映到一個值。字典通常用於儲存相關的資料,例如與特定實體或物件相關的資訊,您可以在其中根據其鍵快速檢索值。

Python 的字典是對映型別的示例。對映物件將一個物件的 value 對映到另一個物件。為了在鍵和值之間建立對映,冒號 (:) 符號放在兩者之間。

每個鍵值對由逗號分隔,並用花括號 {} 括起來。每個對中的鍵和值由冒號 (:) 分隔,形成 key:value 的結構。

以下是一些 Python 字典物件的示例 -

capitals = {"Maharashtra":"Mumbai", "Gujarat":"Gandhinagar", "Telangana":"Hyderabad", "Karnataka":"Bengaluru"}
numbers = {10:"Ten", 20:"Twenty", 30:"Thirty",40:"Forty"}
marks = {"Savita":67, "Imtiaz":88, "Laxman":91, "David":49}

字典的關鍵特性

以下是字典的關鍵特性 -

  • 無序 - 字典中的元素沒有特定的順序。3.7 版本之前的 Python 字典不維護插入順序。從 Python 3.7 開始,字典作為語言特性維護插入順序。

  • 可變 - 在建立字典之後,可以更改、新增或刪除項。

  • 索引 - 儘管字典沒有數字索引,但它們使用鍵作為索引來訪問關聯的值。

  • 唯一鍵 - 字典中的每個鍵都必須是唯一的。如果嘗試將值分配給現有鍵,則舊值將被新值替換。

  • 異構 - 字典中的鍵和值可以是任何資料型別。

示例 1

只有數字、字串或元組可以用作鍵。它們都是不可變的。您可以使用任何型別的物件作為值。因此,以下字典定義也有效 -

d1 = {"Fruit":["Mango","Banana"], "Flower":["Rose", "Lotus"]}
d2 = {('India, USA'):'Countries', ('New Delhi', 'New York'):'Capitals'}
print (d1)
print (d2)

它將產生以下輸出 -

{'Fruit': ['Mango', 'Banana'], 'Flower': ['Rose', 'Lotus']}
{'India, USA': 'Countries', ('New Delhi', 'New York'): 'Capitals'}

示例 2

Python 不接受列表等可變物件作為鍵,並引發 TypeError。

d1 = {["Mango","Banana"]:"Fruit", "Flower":["Rose", "Lotus"]}
print (d1)

它將引發 TypeError -

Traceback (most recent call last):
   File "C:\Users\Sairam\PycharmProjects\pythonProject\main.py", line 8, in <module>
d1 = {["Mango","Banana"]:"Fruit", "Flower":["Rose", "Lotus"]}
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: unhashable type: 'list'

示例 3

您可以將值分配給字典中的多個鍵,但一個鍵不能在字典中出現多次。

d1 = {"Banana":"Fruit", "Rose":"Flower", "Lotus":"Flower", "Mango":"Fruit"}
d2 = {"Fruit":"Banana","Flower":"Rose", "Fruit":"Mango", "Flower":"Lotus"}
print (d1)
print (d2)

它將產生以下輸出 -

{'Banana': 'Fruit', 'Rose': 'Flower', 'Lotus': 'Flower', 'Mango': 'Fruit'}
{'Fruit': 'Mango', 'Flower': 'Lotus'}

建立字典

在 Python 中,您可以透過在花括號 {} 內放置用逗號分隔的鍵值對序列來建立字典,其中用冒號 : 分隔每個鍵及其關聯的值。或者,您可以使用 dict() 函式。

示例

以下示例演示瞭如何使用花括號和 dict() 函式建立名為“student_info”的字典 -

# Creating a dictionary using curly braces
sports_player = {
   "Name": "Sachin Tendulkar",
   "Age": 48,
   "Sport": "Cricket"
}
print ("Dictionary using curly braces:", sports_player)
# Creating a dictionary using the dict() function
student_info = dict(name="Alice", age=21, major="Computer Science")
print("Dictionary using dict():",student_info)  

產生的結果如下所示 -

Dictionary using curly braces: {'Name': 'Sachin Tendulkar', 'Age': 48, 'Sport': 'Cricket'}
Dictionary using dict(): {'name': 'Alice', 'age': 21, 'major': 'Computer Science'}

訪問字典項

您可以使用方括號 [] 或 get() 方法訪問與特定鍵關聯的值 -

student_info = {
   "name": "Alice",
   "age": 21,
   "major": "Computer Science"
}
# Accessing values using square brackets
name = student_info["name"]
print("Name:",name)  

# Accessing values using the get() method
age = student_info.get("age")
print("Age:",age)  

獲得的結果如下 -

Name: Alice
Age: 21

修改字典項

您可以修改與特定鍵關聯的值或新增新的鍵值對 -
student_info = {
   "name": "Alice",
   "age": 21,
   "major": "Computer Science"
}
# Modifying an existing key-value pair
student_info["age"] = 22

# Adding a new key-value pair
student_info["graduation_year"] = 2023
print("The modified dictionary is:",student_info)

以上程式碼的輸出如下 -

The modified dictionary is: {'name': 'Alice', 'age': 22, 'major': 'Computer Science', 'graduation_year': 2023}

刪除字典項

您可以使用 del 語句、pop() 方法或 popitem() 方法刪除項 -

student_info = {
   "name": "Alice",
   "age": 22,
   "major": "Computer Science",
   "graduation_year": 2023
}
# Removing an item using the del statement
del student_info["major"]

# Removing an item using the pop() method
graduation_year = student_info.pop("graduation_year")

print(student_info) 

以下是以上程式碼的輸出 -

{'name': 'Alice', 'age': 22}

遍歷字典

您可以使用迴圈遍歷字典中的鍵、值或鍵值對 -

student_info = {
   "name": "Alice",
   "age": 22,
   "major": "Computer Science",
   "graduation_year": 2023
}
# Iterating through keys
for key in student_info:
   print("Keys:",key, student_info[key])

# Iterating through values
for value in student_info.values():
   print("Values:",value)

# Iterating through key-value pairs
for key, value in student_info.items():
   print("Key:Value:",key, value) 

執行以上程式碼後,我們將獲得以下輸出 -

Keys: name Alice
Keys: age 22
Keys: major Computer Science
Keys: graduation_year 2023
Values: Alice
Values: 22
Values: Computer Science
Values: 2023
Key:Value: name Alice
Key:Value: age 22
Key:Value: major Computer Science
Key:Value: graduation_year 2023

字典鍵的屬性

字典值沒有任何限制。它們可以是任何任意 Python 物件,無論是標準物件還是使用者定義的物件。但是,鍵的情況並非如此。

關於字典鍵,有兩點需要注意 -

  • 每個鍵只能有一個條目。這意味著不允許重複鍵。當在賦值過程中遇到重複鍵時,最後一次賦值將生效。例如 -
  • dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'}
    print ("dict['Name']: ", dict['Name'])
    

    執行以上程式碼時,會產生以下結果 -

    dict['Name']:  Manni
    
  • 鍵必須是不可變的。這意味著您可以使用字串、數字或元組作為字典鍵,但諸如 ['key'] 之類的東西是不允許的。以下是一個簡單的示例 -
  • dict = {['Name']: 'Zara', 'Age': 7}
    print ("dict['Name']: ", dict['Name'])
    

    執行以上程式碼時,會產生以下結果 -

    Traceback (most recent call last):
       File "test.py", line 3, in <module>
          dict = {['Name']: 'Zara', 'Age': 7};
    TypeError: unhashable type: 'list'
    

Python 字典運算子

在 Python 中,定義了以下運算子用於字典運算元。在示例中,使用了以下字典物件。

d1 = {'a': 2, 'b': 4, 'c': 30}
d2 = {'a1': 20, 'b1': 40, 'c1': 60}
運算子 描述 示例
dict[key] 提取/分配與鍵對映的值 print (d1['b']) 檢索 4

d1['b'] = 'Z' 將新值分配給鍵 'b'

dict1|dict2 兩個字典物件的並集,返回新物件 d3=d1|d2 ; print (d3)

{'a': 2, 'b': 4, 'c': 30, 'a1': 20, 'b1': 40, 'c1': 60}

dict1|=dict2 增強的字典並集運算子 d1|=d2; print (d1)

{'a': 2, 'b': 4, 'c': 30, 'a1': 20, 'b1': 40, 'c1': 60}

Python 字典方法

Python 包含以下字典方法 -

序號 方法及描述
1 dict.clear()

刪除字典 dict 的所有元素

2 dict.copy()

返回字典 dict 的淺複製

3 dict.fromkeys()

建立一個新的字典,其鍵來自 seq,值設定為 value

4 dict.get(key, default=None)

對於key 鍵,返回 value 或 default(如果鍵不在字典中)

5 dict.has_key(key)

如果鍵在字典 dict 中,則返回 true,否則返回 false

6 dict.items()

返回 dict 的 (鍵,值) 元組對列表

7 dict.keys()

返回字典 dict 的鍵列表

8 dict.setdefault(key, default=None)

類似於 get(),但如果key 不在 dict 中,則會設定 dict[key]=default

9 dict.update(dict2)

將字典 dict2 的鍵值對新增到 dict

10 dict.values()

返回字典 dict 的值列表

與字典一起使用的內建函式

以下是我們可以與字典一起使用的內建函式 -

序號 函式及描述
1 cmp(dict1, dict2)

比較兩個 dict 的元素。

2 len(dict)

給出字典的總長度。這將等於字典中專案的數量。

3 str(dict)

生成字典的可列印字串表示形式

4 type(variable)

返回傳遞變數的型別。如果傳遞的變數是字典,則它將返回字典型別。

廣告