Python字典理解教程

Python字典理解教程

Python 編程語言提供了一套獨特的工具,不僅使編碼變得有趣,而且還可以加速您作為程序員的進步。由於其易用性,Python 已成為各種行業的首選語言,從 Web 開發和數據科學到金融等。

Python字典理解教程

Python字典理解是一個重要的工具,它允許您通過迭代現有的可迭代數據結構或字典來創建新的來動態生成字典。您可以將字典推導式視為類似於列表推導式,但用例略有不同。

當您熟悉推導式時,您會發現它們可以通過提高清晰度和消除對長而重複的循環的需求來顯著改進代碼。

如果您是Python的新手,您可能沒有遇到過理解或在代碼中使用過它。在深入語法之前,讓我們解決一個主要問題:什麼是 Python 字典理解?

目錄

什麼是 Python 字典理解?

Python Dictionary Comprehension 是一種使用簡單表達式創建字典的簡潔方法。它允許你生成新的字典而不需要使用 for-loops.e

我們來看一個理解的例子。假設您有兩個列表,一個包含鍵,另一個包含值:

keys = ['a', 'b', 'c']
values = [1, 2, 3]

使用字典理解,您可以通過遍歷兩個列表並組合相應的鍵值對來創建一個新字典:

my_dict = {k: v for k, v in zip(keys, values)}
print(my_dict)

輸出將是:

{'a': 1, 'b': 2, 'c': 3}

Python字典理解教程

上面的示例應該讓您了解Python中的理解是什麼。為了進一步幫助您鞏固概念,讓我們了解一下 Python 中字典推導式的語法。

理解字典理解的句法

字典理解的語法簡單但功能強大。它們提供了一種在 Python 中創建新字典的簡潔方法。此外,它們遵循與列表理解類似的語法,但使用大括號 {} 和由冒號分隔的鍵值對。

基本結構如下:

{key: value for (key, value) in iterable}

在此語法中,鍵和值表示用於生成結果字典的鍵和值的表達式。可迭代對象提供用於創建鍵值對的數據源。

此語法在 Python 3 中引入並向後移植到 Python 2.7,確保跨 Python 版本的廣泛兼容性。

例如,要使用字典推導式創建一個將數字 0 到 4 映射到它們的平方的字典,您可以使用以下 Python 代碼:

square_dict = {x: x**2 for x in range(5)}

這將產生以下字典:

{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

Python字典理解教程

如果您想同時迭代兩個變量怎麼辦?您可以使用字典推導式和 zip() 函數從兩個可迭代對象創建一個字典來實現這一點,一個代表鍵,另一個代表值。這是一個例子:

keys = ['a', 'b', 'c', 'd', 'e']
values = [1, 2, 3, 4, 5]
my_dict = {k: v for k, v in zip(keys, values)}

生成的字典將是:

{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

Python字典理解教程

字典理解還允許您在理解的末尾添加一個可選的 if 語句,以對包含的項目應用條件過濾器。

例如,您可以使用字典理解創建一個只有偶數及其平方的字典:

even_square_dict = {x: x**2 for x in range(10) if x % 2 == 0}

這導致:

{0: 0, 2: 4, 4: 16, 6: 36, 8: 64}

Python字典理解教程

現在您已經對理解的語法有了一定的了解,讓我們看一下理解的一些示例。

字典理解的例子

由於其強大而優雅的語法,字典理解找到了一系列用例。它們可以節省您的時間並使您的代碼更具可讀性。

將數字映射到它們的正方形

考慮一個簡單的例子,你想創建一個字典,使用 Python 字典理解將數字映射到它們的正方形:

squares = {x: x**2 for x in range(1, 6)}
print(squares)

這將輸出:

{1: 1, 2: 4, 3: 9, 4: 16, 5: 25}

上面的代碼與運行一個循環六次並對每個數字進行平方的工作相同。下面的代碼演示了運行一個循環來獲取數字的平方:

squares = {}
for x in range(1, 6):
    squares[x] = x ** 2

print(squares)

此時,您可能想知道為什麼在可以使用循環時使用推導式。在編程中,一個經驗法則是編寫緊湊高效的代碼。

您還可以將條件應用到您的理解中。例如,您可能想創建一個僅包含偶數及其平方的字典:

even_squares = {x: x**2 for x in range(1, 6) if x % 2 == 0}
print(even_squares)

運行這段代碼會產生一個新的字典,如下所示:

{2: 4, 4: 16}

反向鍵和值

您還可以通過 Python 中的字典理解輕鬆反轉字典元素。

以下代碼演示瞭如何使用字典理解來反轉現有字典的鍵和值:

original_dict = {"one": 1, "two": 2, "three": 3, "four": 4}
reversed_dict = {v: k for k, v in original_dict.items()}
print(reversed_dict)

上面的字典理解(或字典理解)將打印以下內容:

{1: 'one', 2: 'two', 3: 'three', 4: 'four'}

Python字典理解教程

要更好地了解什麼是字典以及如何在不同情況下使用它們,請參閱下面給出的視頻:

提供的示例為在 Python 項目中使用字典理解奠定了堅實的基礎。

此外,還可以進一步優化字典理解,允許單行代碼完成複雜的任務,這些任務可能會通過循環消耗更多的時間和內存。

詞典理解的 3 大優勢

您已經通過提供的示例體驗了字典理解的優雅。除了可讀性之外,在使用 Python 的高效鍵/值哈希表結構(稱為字典理解)時,推導式還提供了幾個優勢,包括效率。

1. 創建清晰簡單的代碼

Comprehensions 允許您以可讀的方式毫不費力地創建新詞典。與傳統循環相比,它們使您的代碼看起來更像 Pythonic。

2. 更好的表現與風格

理解不僅優雅而且高效。它們通常比 for 循環工作得更快,因為它們使用單個表達式。Python對這類代碼進行了優化,無需重複調用字典構造函數或使用 update() 方法。

3. 簡單的過濾和數據轉換

字典理解的另一個優點是它在過濾和轉換數據方面的簡單性。例如,您可以通過應用條件或修改鍵或值從現有字典創建新字典。

了解何時在 Python 中使用字典推導式至關重要,因為它們會很快變得複雜且難以讀寫。現在,讓我們探索 Python 中字典理解的一些用例。

何時使用詞典理解的 3 個示例

理解在以下 3 種情況下很有用:

1.從兩個列表創建字典時

{key:value for key, value in zip(list1, list2)}

2.根據值過濾字典時

{k: v for k, v in original_dict.items() if v > threshold}

3. 轉換鍵或值時

{k.upper(): v * 2 for k, v in original_dict.items()}

重要的是要記住,雖然推導式可以使您的代碼更加優雅和高效,但如果它們過於復雜,它們也會變得難以閱讀。

讓我們看看使用字典推導式時最常見的一些陷阱。

字典理解的陷阱

字典推導式帶來了優雅和效率,但也帶來了挑戰。我們將討論與大型數據集的可讀性、複雜性和性能相關的常見陷阱。

平衡複雜性和可讀性

複雜的詞典理解可能難以閱讀。優先考慮代碼的可讀性,尤其是在與他人合作時。在某些情況下,傳統的 for 循環可能更簡單且更易於維護。

大型數據集的性能

對於大型數據集,字典理解可能並不總是最佳的。根據Stack Overflow 的說法,由於 C 中的循環,內置的 dict() 構造函數可以勝過具有大量鍵值對的字典理解。

與其他方法的比較

在本節中,我們將比較字典理解與在 Python 中創建字典的兩種替代方法:for 循環和 lambda 函數。

For 循環

使用 for 循環創建字典涉及初始化一個空字典,然後遍歷所需的有效鍵值對,將每一對添加到字典中。與字典理解相比,這是一種更冗長的方法。

以下是使用 for 循環創建字典的示例:

dictionary = {}
for key, value in zip(keys, values):
    dictionary[key] = value

相反,字典理解允許您在一行中獲得相同的結果:

dictionary = {key: value for key, value in zip(keys, values)}

Python字典理解教程

如您所見,推導式提供了一種在 Python 中創建字典的簡潔且可讀性更強的方法。

拉姆達函數

我們還可以使用 Lambda 函數來創建字典。Lambda 函數是一種在 Python 中創建小型匿名函數的方法。它們可以與 map() 函數結合使用來創建字典。

讓我們看一個用於創建字典的 Lambda 函數示例:

keys = ['a', 'b', 'c']
values = [1, 2, 3]

key_value_pairs = map(lambda key, value: (key, value), keys, values)
dictionary = dict(key_value_pairs)

相比之下,下面是使用推導式創建同一個字典的方式:

dictionary = {key: value for key, value in zip(keys, values)}

Python字典理解教程

同樣,字典理解為使用 lambda 函數和 map() 函數創建字典提供了一種簡潔且更具可讀性的替代方法。

詞典理解的最佳實踐

在 Python 中使用推導式時,必須遵循最佳實踐以提高可讀性、可維護性和效率。以下是一些需要考慮的最佳實踐:

1. 保持字典理解簡單

詞典理解功能強大,但應該簡潔明了。如果您的理解變得過於復雜或跨越多行,請考慮改用傳統的 for 循環。這有助於理解代碼,尤其是對於其他人或稍後重新訪問您的工作時。

2.利用內置函數

Python 提供了諸如 zip() 和 enumerate() 之類的內置函數來幫助創建推導式。使用這些函數來簡化您的代碼並使其更具可讀性。

例如,使用 zip() 組合兩個列表並創建一個字典會產生如下簡潔明了的代碼:

{key: value for key, value in zip(keys, values)}

3. 明智地使用條件語句

必要時在你的理解中加入條件語句,但不要過度使用它們。它們可以幫助過濾或修改生成的字典,但太多的嵌套條件會使代碼難以閱讀。一個涉及條件語句的簡單示例是:

{x: x**2 for x in range(10) if x % 2 == 0}

4.注意嵌套字典理解

嵌套字典理解可以生成具有嵌套結構的字典。但是,與條件語句一樣,過多的嵌套字典會使代碼更難破譯。避免在嵌套字典理解中超出兩層嵌套。

有時您可能必須在循環內使用嵌套字典推導式才能達到預期的效率。

我們的最終決定權

到目前為止,您已經掌握了 Python 中的字典理解。這種優雅、高效的技術有助於通過迭代可迭代對像或使用條件來創建字典。理解力簡化了您的代碼,提高了可讀性和可維護性。

與傳統的 for 循環相比,創建新詞典很容易理解,節省時間和精力。它們在數據處理、映射和轉換等實際應用程序中很有用。

如果您想進一步了解 Python 知識並成為真正的專家,我們的 Python 課程,看看我們如何培養世界上最好的 Python 用戶。


什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

什麼是 Python 中的自我:真實世界的例子

如何在 R 中保存和加載 RDS 文件

如何在 R 中保存和加載 RDS 文件

您將學習如何在 R 中保存和加載 .rds 文件中的對象。本博客還將介紹如何將對像從 R 導入 LuckyTemplates。

回顧前 N 個工作日——DAX 編碼語言解決方案

回顧前 N 個工作日——DAX 編碼語言解決方案

在此 DAX 編碼語言教程中,了解如何使用 GENERATE 函數以及如何動態更改度量標題。

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

在 LuckyTemplates 中使用多線程動態視覺技術展示見解

本教程將介紹如何使用多線程動態可視化技術從報告中的動態數據可視化中創建見解。

LuckyTemplates 篩選上下文簡介

LuckyTemplates 篩選上下文簡介

在本文中,我將貫穿過濾器上下文。篩選上下文是任何 LuckyTemplates 用戶最初應該了解的主要主題之一。

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

使用 LuckyTemplates 在線服務中的應用程序的最佳技巧

我想展示 LuckyTemplates Apps 在線服務如何幫助管理從各種來源生成的不同報告和見解。

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

隨著時間的推移分析利潤率變化——使用 LuckyTemplates 和 DAX 進行分析

了解如何在 LuckyTemplates 中使用度量分支和組合 DAX 公式等技術計算利潤率變化。

DAX Studio 中數據緩存的物化想法

DAX Studio 中數據緩存的物化想法

本教程將討論數據緩存物化的想法,以及它們如何影響 DAX 在提供結果時的性能。

使用 LuckyTemplates 進行業務報告

使用 LuckyTemplates 進行業務報告

如果直到現在你還在使用 Excel,那麼現在是開始使用 LuckyTemplates 來滿足你的業務報告需求的最佳時機。

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的

什麼是 LuckyTemplates 網關?所有你必須知道的