1 字典功能
字典是可變容器模型,且可存儲任意類型對象;
字典的每個鍵值對 <key: value> 用冒號 : 分割,每個對之間用逗號(,)分割,整個字典包括在花括號 {} 中 ,格式如下所示:
d = {key1 : value1, key2 : value2, key3 : value3 }
鍵必須是唯一的,但值則不必。
值可以取任何數據類型,但鍵必須是不可變的,如字符串,數字。
一個簡單的字典實例:person = {"name": "Alice", "age": 25, "city": "New York"}
2 創建字典
2.1 使用{ }
創建字典
person = {"name": "Alice", "age": 25, "city": "New York"}
較長的字典可分行書寫
favorite_languages = {'jen': 'python','sarah': 'c','edward': 'rust','phil': 'python',}if 'erin' not in favorite_languages.keys():print("Erin, please take our poll!")friends = ['phil', 'sarah']
for name in favorite_languages.keys():print(f"Hi {name.title()}.")if name in friends:language = favorite_languages[name].title()print(f"\t{name.title()}, I see you love {language}!")
2.2 使用 dict() 函數創建字典
person = dict(name="Bob", age=30, city="Los Angeles")
2.3 從列表的鍵值對元組創建字典
items = [("apple", 1), ("banana", 2), ("orange", 3)]
fruit_counts = dict(items)
3 訪問字典中的元素
person = {"name": "Alice", "age": 25, "city": "New York"}
訪問元素:使用方括號 [] 通過鍵訪問字典中的單個值。
只訪問鍵:使用 keys() 方法獲取所有鍵,并可以通過循環遍歷。
只訪問值:使用 values() 方法獲取所有值,并可以通過循環遍歷。
訪問鍵值對:使用 items() 方法獲取所有鍵值對,并可以通過循環遍歷每個鍵值對。
3.1 訪問字典中的鍵和值
3.1.1 訪問單個元素:[ ]
通過[ ]
訪問單個鍵值對:通過指定鍵來獲取對應的值,鍵不存在時會引發錯誤或返回默認值。
person = {"name": "Alice", "age": 25, "city": "New York"}
name = person["name"]
print(name) # 輸出:Alice
3.1.2 訪問單個元素:get()
使用 get() 方法
訪問(更安全)
person = {"name": "Alice", "age": 25, "city": "New York"}
name = person.get("name")
age = person.get("age")
print(name, age) # 輸出:Alice 25
# 如果鍵不存在,返回默認值
country = person.get("country", "Unknown")
print(country) # 輸出:Unknown
建議優先使用 get() 方法來訪問字典中的值,以避免因鍵不存在而導致的錯誤。
3.1.2 遍歷所有元素鍵值對:逐個[ ]
alien_0 = {'color': 'green', 'speed': 'slow'}# 使用方括號訪問每個元素
print(alien_0['color']) # 輸出:green
print(alien_0['speed']) # 輸出:slow
3.1.2.2 遍歷所有鍵值對: for + [ ]
person = {"name": "Alice", "age": 25, "city": "New York"}# 遍歷字典的鍵,然后使用方括號訪問對應的值
for key in person:value = person[key]print(f"Key: {key}, Value: {value}")
output
Key: name, Value: Alice
Key: age, Value: 25
Key: city, Value: New York
person = {"name": "Alice", "age": 25, "city": "New York"}
for key, value in person():print()
# 輸出:
# name: Alice
# age: 25
# city: New York
3.1.2.3 遍歷所有鍵值對: items()
使用 items()
方法獲取字典中的所有元素的鍵和值,然后通過循環訪問。
person = {"name": "Alice", "age": 25, "city": "New York"}
for key, value in person.items():print(f"{key}: {value}")
# 輸出:
# name: Alice
# age: 25
# city: New York
alien_0 = {'color': 'green', 'speed': 'slow'}# 獲取字典的所有鍵值對
items = alien_0.items()
print(items) # 輸出:dict_items([('color', 'green'), ('speed', 'slow')])# 遍歷字典的所有鍵值對
for key, value in alien_0.items():print(f"{key}: {value}")
# 輸出:
# color: green
# speed: slow
3.2 只訪問字典中的鍵
3.2.1 只訪問字典中的鍵:變量名輸出
favorite_languages = {'jen': 'python','sarah': 'c','edward': 'rust','phil': 'python',}print("The following languages have been mentioned:")
for language in favorite_languages:print(language)
output:
jen
sarah
edward
phil
3.2.2 只訪問字典中的鍵 :keys()
alien_0 = {'color': 'green', 'speed': 'slow'}# 獲取字典的所有鍵
keys = alien_0.keys()
print(keys) # 輸出:dict_keys(['color', 'speed'])# 遍歷字典的所有鍵
for key in alien_0:print(key)
# 輸出:
# color
# speed
3.3 只訪問字典元素的值
3.3.1 訪問單個元素值: get() 方法
get() 方法是安全訪問字典元素的推薦方式,尤其是在不確定字典中是否存在某個鍵時。如果字典中存在指定的鍵,它會返回該鍵對應的值;如果不存在,則返回一個默認值,而不是拋出錯誤。
alien_0 = {'color': 'green', 'speed': 'slow'}# 嘗試獲取鍵 'points' 對應的值
point_value = alien_0.get('points', 'No point value assigned.')
print(point_value)
對比
person = {“name”: “Alice”, “age”: 25, “city”: “New York”}
避免錯誤:使用 get() 方法可以避免因字典中沒有指定鍵而引發的 KeyError。
提供默認值:可以指定一個默認值,使代碼更具可讀性和健壯性。
與[]
直接訪問的區別
直接訪問:alien_0[‘points’]
如果鍵不存在,會拋出 KeyError。 get() 方法:如果鍵不存在,返回默認值(如果沒有指定默認值,則返回 None)。
3.3.2 通過方法values()
所有元素的值
訪問所有值,無需for循環,可直接輸出所有值
alien_0 = {'color': 'green', 'speed': 'slow'}# 獲取字典的所有值
values = alien_0.values()
print(values) # 輸出:dict_values(['green', 'slow'])# 遍歷字典的所有值
for value in alien_0.values():print(value)
# 輸出:
# green
# slow
3.4 排序后訪問
sorted
favorite_languages = {'jen': 'python','sarah': 'c','edward': 'rust','phil': 'python',}for name in sorted(favorite_languages.keys()):print(f"{name.title()}, thank you for taking the poll.")
4 修改字典中的元素
person = {"name": "Alice", "age": 25, "city": "New York"}# 修改現有鍵對應的值
person["age"] = 26
print(person) # 輸出:{'name': 'Alice', 'age': 26, 'city': 'New York'}# 添加新的鍵值對
person["country"] = "USA"
print(person) # 輸出:{'name': 'Alice', 'age': 26, 'city': 'New York', 'country': 'USA'}
5 刪除字典中的元素
person = {"name": "Alice", "age": 25, "city": "New York"}# 使用 pop() 方法刪除指定鍵及其關聯值
age = person.pop("age")
print(age) # 輸出:25
print(person) # 輸出:{'name': 'Alice', 'city': 'New York'}# 使用 del 語句刪除元素
del person["city"]
print(person) # 輸出:{'name': 'Alice'}# 清空字典
person.clear()
print(person) # 輸出:{}
6 遍歷字典
person = {"name": "Alice", "age": 25, "city": "New York"}# 遍歷字典的鍵
for key in person:print(key)
# 輸出:
# name
# age
# city# 遍歷字典的值
for value in person.values():print(value)
# 輸出:
# Alice
# 25
# New York# 遍歷字典的鍵值對
for key, value in person.items():print(f"{key}: {value}")
# 輸出:
# name: Alice
# age: 25
# city: New York
7 檢查某個鍵或值是否在字典中
person = {"name": "Alice", "age": 25, "city": "New York"}# 檢查鍵是否存在于字典中
has_name = "name" in person
print(has_name) # 輸出:True# 檢查值是否存在于字典中
has_alice = "Alice" in person.values()
print(has_alice) # 輸出:True
8 字典的嵌套
# 字典中嵌套字典
students = {"Alice": {"id": 1, "grade": "A"},"Bob": {"id": 2, "grade": "B"},"Charlie": {"id": 3, "grade": "C"}
}# 訪問嵌套字典中的元素
alice_grade = students["Alice"]["grade"]
print(alice_grade) # 輸出:"A"# 修改嵌套字典中的元素
students["Bob"]["grade"] = "A"
print(students["Bob"]) # 輸出:{'id': 2, 'grade': 'A'}
8.1 字典的嵌套定義
users = {'aeinstein': {'first': 'albert','last': 'einstein','location': 'princeton',},'mcurie': {'first': 'marie','last': 'curie','location': 'paris',},}for username, user_info in users.items():print(f"\nUsername: {username}")full_name = f"{user_info['first']} {user_info['last']}"location = user_info['location']print(f"\tFull name: {full_name.title()}")print(f"\tLocation: {location.title()}")
8.2 在字典中嵌套列表
pizza = {'crust': 'thick','toppings': ['mushrooms', 'extra cheese'],}# Summarize the order.
print(f"You ordered a {pizza['crust']}-crust pizza ""with the following toppings:")for topping in pizza['toppings']:print(f"\t{topping}")
8.3 將字典嵌套入列表
8.3.1 通過逐個定義將字典嵌套入列表
alien_0 = {'color': 'green', 'points': 5}
alien_1 = {'color': 'yellow', 'points': 10}
alien_2 = {'color': 'red', 'points': 15}aliens = [alien_0, alien_1, alien_2]for alien in aliens:print(alien)
8.3.2 通過循環將字典嵌套入列表
# Make an empty list for storing aliens.
aliens = []# Make 30 green aliens.
for alien_number in range(30):new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}aliens.append(new_alien)# Show the first 5 aliens.
for alien in aliens[:5]:print(alien)
print("...")# Show how many aliens have been created.
print(f"Total number of aliens: {len(aliens)}")
output
{‘color’: ‘yellow’, ‘points’: 10, ‘speed’: ‘medium’}
{‘color’: ‘yellow’, ‘points’: 10, ‘speed’: ‘medium’}
{‘color’: ‘yellow’, ‘points’: 10, ‘speed’: ‘medium’}
{‘color’: ‘green’, ‘points’: 5, ‘speed’: ‘slow’}
{‘color’: ‘green’, ‘points’: 5, ‘speed’: ‘slow’}
…
Total number of aliens: 30