一、基礎知識
Python中的字典是一種無序、可變的數據類型,用{ }表示。字典與其他語言中的Map或者HashTable非常相似,由鍵值對組成,可以通過鍵來快速查找和訪問對應的值。
Python中的字典推導式是利用類似於列表推導式的語法糖來快速創建字典的方式。
# 創建一個簡單的字典 dict1 = {'apple': 2, 'banana': 3, 'orange': 4} # 使用字典推導式創建字典 dict2 = {x: x**2 for x in (2, 4, 6)}
上面的例子創建了兩個字典,其中第一個字典是手動創建的,並且包含了3個鍵值對;第二個字典使用字典推導式創建,其鍵為[2,4,6]中的元素,值則是它們的平方。
二、過濾數據
字典推導式允許我們通過if語句來過濾需要添加到字典中的數據。這在數據篩選方面非常有用,可以幫助我們快速篩選出需要的數據組成一個新的字典。
# 創建一個原始字典 score = {'Tom': 90, 'Jerry': 80, 'Mickey': 85, 'Minnie': 70} # 使用字典推導式篩選出分數大於等於80分的學生 passed = {k: v for k, v in score.items() if v >= 80}
上面的例子中,我們創建了一個包含4個學生分數的字典score。然後使用字典推導式篩選出分數大於等於80分的學生,創建了一個新的字典passed。
三、多個序列創建字典
字典推導式也可以讓我們快速將多個序列合併成一個字典。如果將多個列表、元組作為輸入,需要確保它們的長度相等。
days = ['Monday', 'Tuesday', 'Wednesday'] fruits = ['banana', 'orange', 'apple'] # 使用zip()函數 fruit_dict = {k: v for k, v in zip(days, fruits)}
將兩個長度相等的序列合併成一個字典,可以使用 zip() 函數構造元組的列表,然後使用字典推導式創建一個新的字典。
四、嵌套字典推導式
字典推導式也可以根據已經存在的字典創建一個新的字典,也就是嵌套字典推導式。
# 創建一個原始字典 score = {'Tom': {'math': 90, 'chinese': 80, 'english': 85}, 'Jerry': {'math': 85, 'chinese': 70, 'english': 75}, 'Mickey': {'math': 80, 'chinese': 90, 'english': 95}} # 使用嵌套字典推導式創建新的字典,計算每個學生的總分 total_score = {k: sum([v for v in score[k].values()]) for k in score}
上面的例子中,我們創建了一個嵌套字典,用於記錄每個學生的數學、語文、英語成績。然後使用嵌套字典推導式加上列表推導式計算每個學生的總分,創建了一個新的字典。
五、性能優化
在使用字典推導式的時候,要注意一些細節可以影響性能。比如在字典推導式中使用函數而不是變量,相比於使用變量,函數會降低性能。還有就是如果推導式過於複雜,應該考慮是否需要使用傳統的for循環進行替代。
# 待優化版本 words = ['apple', 'banana', 'cat', 'dog', 'elephant'] # 需要判斷多個元素是否在字典中 result = {w: w in ['cat', 'dog', 'horse'] for w in words} # 優化版 check_dict = {'cat': 1, 'dog': 2, 'horse': 3} result = {w: check_dict.get(w) for w in words}
上面的例子中,我們在一個循環中執行了多個判斷操作,鑒於每次判斷都要使用 in 運算符對字典進行遍歷,而這個操作相當耗費時間。我們可以使用字典get()方法代替in運算符,這樣就能避免重複遍歷字典,提高性能。
六、總結
字典推導式是Python中的一項非常實用、強大的功能。通過學習本文的內容,我們可以靈活地使用字典推導式創建一個新的字典、過濾數據、將多個列表、元組合併成一個字典、對一個已存在的字典進行嵌套字典推導式等操作。同時也需要注意性能優化,及時對代碼進行優化和重構,以避免影響執行效率。
原創文章,作者:JUOW,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/149473.html