App下載

Python 中的字典理解——實例介紹

Bala Priya C 2021-08-25 10:46:45 瀏覽數(shù) (2909)
反饋

字典是 Python 中強大的內置數(shù)據(jù)結構,可將數(shù)據(jù)存儲為鍵值對。字典理解對于從現(xiàn)有字典和可迭代對象創(chuàng)建新字典非常有幫助。在本教程中,我們將通過編寫一些簡單的示例來了解字典推導式在 Python 中的工作原理。

什么是 Python 中的字典?

Python 中的字典允許我們存儲兩組值之間的一系列映射,即鍵和值。

  • 字典中的所有項目都包含在一對花括號內{}。
  • 字典中的每一項都是鍵和值之間的映射——稱為鍵值對。
  • 鍵值對通常稱為字典項。
  • 您可以使用相應的鍵訪問這些值。

這是字典的一般示例:

my_dict = {"key1":<value1>,"key2":<value2>,"key3":<value3>,"key4":<value4>}

在上面的例子中,

  • 字典my_dict包含 4 個鍵值對(項目)。
  • "key1"通過"key4"是4個鍵。
  • 您可以使用my_dict["key1"]to access <value1>、my_dict["key2"]to access<value2>等。

現(xiàn)在我們知道了 Python 字典是什么,讓我們繼續(xù)學習字典理解。

如何使用字典理解從可迭代對象創(chuàng)建 Python 字典

在本節(jié)中,讓我們使用字典理解從可迭代對象(例如列表或元組)創(chuàng)建 Python 字典。

如果我們選擇動態(tài)生成鍵或值,我們可以只使用一個可迭代對象來創(chuàng)建一個新的 Python 字典。

當我們選擇動態(tài)生成值時,我們可以使用迭代中的項目作為鍵,反之亦然。

一般語法如下所示。請注意 <> 之間的名稱是實際變量名稱的占位符。

<dict_name> = {<new_key>:<new_value> for <item> in <iterable>}

讓我們解析上面的語法。

  • {} 表示我們正在填充字典。
  • 對于迭代中的每個項目,我們在字典中生成一個鍵值對。

? 是時候舉個簡單的例子了。

Python 詞典理解 - 示例 1

假設我們有一個訪問我們商店的客戶列表,我們想為每個客戶提供隨機折扣。我們希望折扣值介于 1 美元到 100 美元之間。

在 Python 中,random.randint(i,j)返回i和之間的隨機整數(shù)j,其中兩個端點都包含在內。

因此,我們可以使用randint()Python 的 random 模塊中的函數(shù)為列表中的每個客戶生成 $1 到 $100 之間的折扣。

下面的代碼片段展示了我們如何discount_dict從客戶列表中創(chuàng)建一個新字典。

import random
customers = ["Alex","Bob","Carol","Dave","Flow","Katie","Nate"]
discount_dict = {customer:random.randint(1,100) for customer in customers}
print(discount_dict)

#Output

{'Alex': 16, 'Bob': 26, 'Carol': 83, 'Dave': 21, 'Flow': 38, 'Katie': 47, 'Nate': 89}

上面的示例執(zhí)行以下操作:

  • 循環(huán)遍歷客戶列表 ( customers),
  • 使用每個客戶的姓名作為鍵,并且
  • 生成 1 美元到 100 美元之間的隨機折扣作為密鑰的值。

如何使用字典理解從兩個可迭代對象創(chuàng)建 Python 字典

如果我們已經(jīng)有包含鍵和值的預定義可迭代對象怎么辦?假設您有兩個列表,list_1并且list_2–list_1包含鍵和list_2相應的值。

我們現(xiàn)在可以使用 Python 的zip()函數(shù)來壓縮這兩個列表以生成鍵值對。

注意:該zip函數(shù)接受一系列可迭代對象作為參數(shù),并返回一個元組迭代器,如下圖所示。

所以,第一個元組是第一個鍵值對,第二個元組是第二個鍵值對,一般來說,第i個元組是第i個鍵值對。

在這種情況下,字典理解采用以下形式:

<dict_name> = {<new_key>:<new_value> for (key,value) in zip(list1,list2)}

解析上述語法非常簡單。

  • 鍵和值可作為元組使用,因為我們已使用該zip()函數(shù)將它們壓縮在一起。
  • 現(xiàn)在,我們遍歷這個元組迭代器來獲取字典的鍵值對。

? 是時候看另一個快速示例了。

Python 詞典理解 - 示例 2

假設我們想創(chuàng)建一個我們城市每周溫度的字典。天數(shù)應該是鍵,與天數(shù)對應的溫度(攝氏度)應該是值。

假設我們有兩個列表中的天數(shù)和溫度,如下所示。

days = ["Sunday", "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]
temp_C = [30.5,32.6,31.8,33.4,29.8,30.2,29.9]

我們現(xiàn)在可以繼續(xù)使用字典理解來創(chuàng)建每周溫度的字典。

# Creating a dictionary of weekly tempertaures
# from the list of temperatures and days

weekly_temp = {day:temp for (day,temp) in zip(days,temp_C)}

print(weekly_temp)

# Output
{'Sunday': 30.5, 'Monday': 32.6, 'Tuesday': 31.8, 'Wednesday': 33.4, 'Thursday': 29.8, 'Friday': 30.2, 'Saturday': 29.9}

在上面的示例中,我們使用該zip()函數(shù)將日期和溫度列表壓縮在一起。我們現(xiàn)在可以通過使用任何一天作為鍵來訪問字典來獲取當天的溫度,如下所示:

weekly_temp["Thursday"]
# Output
29.8

如何在 Python 字典上使用 items() 方法

到目前為止,我們已經(jīng)看到了如何使用鍵來訪問值。我們如何訪問字典中的所有鍵值對?

為此,我們可以調用items()字典上的方法來獲取所有鍵值對,如下面的代碼片段所示。

discount_dict.items()

# Output
dict_items([('Alex', 16), ('Bob', 26), ('Carol', 83), ('Dave', 21), ('Flow', 38), ('Katie', 47), ('Nate', 89)])

如何使用字典理解從現(xiàn)有字典創(chuàng)建 Python 字典

假設我們已經(jīng)有一個 Python 字典。

但是,我們想創(chuàng)建一個新字典,其中僅包含我們字典中滿足特定條件的項目。字典理解在這方面非常方便。

<dict_name> = {<new_key>:<new_value> for (key,value) in <dict>.items() if <condition>}

讓我們解析上面的語法。我們使用該items()方法并獲取現(xiàn)有字典中的所有鍵值對。

  • 我們訪問第一個字典項,并檢查condition計算結果是否為  True。
  • 如果條件為True,我們將第一項添加到我們的新字典中。
  • 然后我們對現(xiàn)有字典中的所有項目重復這些步驟。

? 讓我們舉一個例子來看看這是如何工作的。

Python 詞典理解 - 示例 3

讓我們以之前創(chuàng)建discount_dict字典的折扣示例為基礎。讓我們discount_dict再看看我們的字典。

{'Alex': 16, 'Bob': 26, 'Carol': 83, 'Dave': 21, 'Flow': 38, 'Katie': 47, 'Nate': 89}

我們看到一些客戶很幸運地獲得了比其他客戶更高的折扣。讓我們解決這種差異,讓我們所有的客戶都滿意。

我們現(xiàn)在想為折扣低于 30 美元的客戶提供下次購買時 10% 的折扣。

在這種情況下,我們正在customer_10從我們的discount_dict字典中創(chuàng)建一個新字典。

customer_10 = {customer:discount for (customer, discount) in discount_dict.items() if discount<30}

print(customer_gifts)

# Output
{'Alex': 16, 'Bob': 26, 'Dave': 21}

上面的代碼執(zhí)行以下操作:

  • 對于我們 中的每件商品discount_dict,它都會利用折扣的價值。
  • 如果折扣低于 30 美元,它會將相應的customer:discount一對添加到我們的新字典中customer_10。

請注意如何將Alex、Bob和Davewho 的折扣低于 30 美元添加到新詞典中。

結論

讓我們總結一下我們在本教程中學到的東西。我們已經(jīng)看到了如何使用 Dictionary Comprehension 從以下內容創(chuàng)建 Python 詞典:

  • 只有一個可迭代的,
  • 兩個可迭代對象,以及
  • 使用條件過濾項目的現(xiàn)有字典。

感謝您的閱讀。祝學習愉快!


0 人點贊