20 個 Python 字典映射技巧,讓數(shù)據(jù)處理更高效
字典作為Python的日常工具,擁有快速查找、高效存儲等特性,是數(shù)據(jù)處理的必備神器。讓我們一起揭開它的15個隱藏技巧,讓你的代碼飛起來!
1. 初始化小技巧:快速創(chuàng)建字典
# 使用zip函數(shù)結(jié)合列表,一鍵成字典
keys = ['name', 'age']
values = ['Alice', 24]
my_dict = dict(zip(keys, values))
print(my_dict)
這個小魔法直接將兩個列表配對成字典,是不是很神奇?
2. 字典推導(dǎo)式,簡潔之美
numbers = [1, 2, 3, 4]
squares = {num: num*num for num in numbers}
print(squares)
一行代碼,數(shù)字變平方,推導(dǎo)式讓你的代碼優(yōu)雅到不行!
3. 獲取鍵不存在的默認值,避免KeyError
my_dict = {'name': 'Bob'}
print(my_dict.get('age', 'Not Found')) # 不怕找不到,直接告訴你“Not Found”
這招用get方法,安全訪問,媽媽再也不擔(dān)心我遇到KeyError了。
4. 刪除鍵值對,干凈利落
# pop方法,刪除并返回值
age = my_dict.pop('age', 'Already gone') # 如果不存在,就默認返回'Already gone'
print(age)
print(my_dict) # 看,'age'沒了
pop一出,誰與爭鋒,鍵值對消失無蹤。
5. 更新字典,合并高手
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict1.update(dict2)
print(dict1) # 'b'的值被更新,'c'加入,合并就這么簡單
update方法,字典合并不費吹灰之力。
6. 遍歷字典,洞察每個角落
for key, value in my_dict.items():
print(f"Key: {key}, Value: {value}")
items方法讓我們遍歷得明明白白,每一個鍵值對都不放過。
7. 只取鍵,或只取值
keys_only = my_dict.keys()
values_only = my_dict.values()
print(list(keys_only)) # 轉(zhuǎn)成列表方便查看
print(list(values_only))
keys和values方法,讓你專注你想要的那部分。
8. 檢查鍵是否存在,一步到位
if 'age' in my_dict:
print("Age is there!")
else:
print("Sorry, no age.")
直接用in,檢查鍵是否存在,就是這么直接。
9. 字典長度,一目了然
print(len(my_dict)) # 瞬間知道字典大小
len函數(shù),快速統(tǒng)計字典的鍵數(shù)量。
10. 字典排序,按值或按鍵
# 按值排序
sorted_dict = sorted(my_dict.items(), key=lambda x: x[1])
print(sorted_dict)
# 按鍵排序
sorted_by_key = sorted(my_dict.items())
print(sorted_by_key)
排序函數(shù)+lambda表達式,按需排序,靈活自如。
11. 字典轉(zhuǎn)列表,形式轉(zhuǎn)換
list_of_tuples = list(my_dict.items())
print(list_of_tuples)
輕松轉(zhuǎn)換,數(shù)據(jù)形態(tài)任你玩轉(zhuǎn)。
12. 清空字典,重頭再來
my_dict.clear()
print(my_dict) # 空空如也,準(zhǔn)備迎接新的數(shù)據(jù)
clear方法,一切從零開始。
13. 字典嵌套,數(shù)據(jù)結(jié)構(gòu)的魔術(shù)
nested_dict = {
'person1': {'name': 'Alice', 'age': 24},
'person2': {'name': 'Bob', 'age': 30}
}
print(nested_dict['person1']['name']) # 訪問內(nèi)層,深挖數(shù)據(jù)
像俄羅斯套娃一樣,一層又一層,復(fù)雜數(shù)據(jù)輕松管理。
14. 利用fromkeys創(chuàng)建初始化字典
keys_list = ['name', 'age', 'city']
default_values = None
my_init_dict = dict.fromkeys(keys_list, default_values)
print(my_init_dict) # 統(tǒng)一初始值,批量創(chuàng)建
fromkeys,批量初始化,效率滿滿。
15. 字典解包,操作升級
dict_a = {'x': 1, 'y': 2}
dict_b = {'y': 3, 'z': 4}
{**dict_a, **dict_b} # **操作符,解包合并,新字典誕生
星號解包,合并字典新姿勢,簡潔而強大。
進階使用和高級技巧
16. 使用defaultdict避免KeyError
from collections import defaultdict
# 創(chuàng)建一個默認值為列表的字典
my_default_dict = defaultdict(list)
my_default_dict['fruits'].append('apple')
my_default_dict['fruits'].append('banana')
print(my_default_dict)
defaultdict自動初始化鍵對應(yīng)的值,這里用列表,添加元素變得異常簡單,無需每次都檢查鍵是否存在。
17. 字典的深拷貝與淺拷貝
import copy
original_dict = {'a': [1, 2], 'b': 3}
shallow_copy = copy.copy(original_dict)
deep_copy = copy.deepcopy(original_dict)
# 修改原字典中的列表
original_dict['a'][0] = 99
print("Original:", original_dict)
print("Shallow Copy:", shallow_copy) # 淺拷貝受影響
print("Deep Copy:", deep_copy) # 深拷貝不受影響
了解深淺拷貝的區(qū)別,對于處理包含可變對象(如列表)的字典至關(guān)重要。
18. 字典的視圖對象:動態(tài)觀察變化
my_dict = {'name': 'Alice', 'age': 24}
keys_view = my_dict.keys()
print("Initial Keys:", keys_view)
# 添加新的鍵值對
my_dict['city'] = 'Wonderland'
print("Keys after update:", keys_view) # 視圖自動更新
字典的keys(), values(), items()返回的是視圖對象,可以實時反映字典的變化。
19. 高級字典推導(dǎo)式:多層映射
data = [('John', 'Doe', 23), ('Jane', 'Doe', 24)]
people = {f"{first} {last}": age for first, last, age in data}
print(people)
利用列表中的子列表,通過字典推導(dǎo)式快速構(gòu)建復(fù)雜的映射關(guān)系。
20. 使用dict.setdefault(),訪問與初始化二合一
my_dict = {}
my_dict.setdefault('score', []).append(90)
my_dict.setdefault('score', []).append(95)
print(my_dict) # 避免了多次檢查和初始化
如果鍵不存在,則初始化并返回該鍵對應(yīng)的值,否則直接返回已有的值,非常實用。