App下載

Python 中的字典理解——實(shí)例介紹

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

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

什么是 Python 中的字典?

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

  • 字典中的所有項(xiàng)目都包含在一對(duì)花括號(hào)內(nèi){}。
  • 字典中的每一項(xiàng)都是鍵和值之間的映射——稱為鍵值對(duì)。
  • 鍵值對(duì)通常稱為字典項(xiàng)。
  • 您可以使用相應(yīng)的鍵訪問(wèn)這些值。

這是字典的一般示例:

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

在上面的例子中,

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

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

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

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

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

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

一般語(yǔ)法如下所示。請(qǐng)注意 <> 之間的名稱是實(shí)際變量名稱的占位符。

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

讓我們解析上面的語(yǔ)法。

  • {} 表示我們正在填充字典。
  • 對(duì)于迭代中的每個(gè)項(xiàng)目,我們?cè)谧值渲猩梢粋€(gè)鍵值對(duì)。

? 是時(shí)候舉個(gè)簡(jiǎn)單的例子了。

Python 詞典理解 - 示例 1

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

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

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

下面的代碼片段展示了我們?nèi)绾蝑iscount_dict從客戶列表中創(chuàng)建一個(gè)新字典。

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),
  • 使用每個(gè)客戶的姓名作為鍵,并且
  • 生成 1 美元到 100 美元之間的隨機(jī)折扣作為密鑰的值。

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

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

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

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

所以,第一個(gè)元組是第一個(gè)鍵值對(duì),第二個(gè)元組是第二個(gè)鍵值對(duì),一般來(lái)說(shuō),第i個(gè)元組是第i個(gè)鍵值對(duì)。

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

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

解析上述語(yǔ)法非常簡(jiǎn)單。

  • 鍵和值可作為元組使用,因?yàn)槲覀円咽褂迷搝ip()函數(shù)將它們壓縮在一起。
  • 現(xiàn)在,我們遍歷這個(gè)元組迭代器來(lái)獲取字典的鍵值對(duì)。

? 是時(shí)候看另一個(gè)快速示例了。

Python 詞典理解 - 示例 2

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

假設(shè)我們有兩個(gè)列表中的天數(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ù)使用字典理解來(lái)創(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)在可以通過(guò)使用任何一天作為鍵來(lái)訪問(wèn)字典來(lái)獲取當(dāng)天的溫度,如下所示:

weekly_temp["Thursday"]
# Output
29.8

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

到目前為止,我們已經(jīng)看到了如何使用鍵來(lái)訪問(wèn)值。我們?nèi)绾卧L問(wèn)字典中的所有鍵值對(duì)?

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

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 字典

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

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

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

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

  • 我們?cè)L問(wèn)第一個(gè)字典項(xiàng),并檢查condition計(jì)算結(jié)果是否為  True。
  • 如果條件為True,我們將第一項(xiàng)添加到我們的新字典中。
  • 然后我們對(duì)現(xiàn)有字典中的所有項(xiàng)目重復(fù)這些步驟。

? 讓我們舉一個(gè)例子來(lái)看看這是如何工作的。

Python 詞典理解 - 示例 3

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

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

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

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

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

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í)行以下操作:

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

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

結(jié)論

讓我們總結(jié)一下我們?cè)诒窘坛讨袑W(xué)到的東西。我們已經(jīng)看到了如何使用 Dictionary Comprehension 從以下內(nèi)容創(chuàng)建 Python 詞典:

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

感謝您的閱讀。祝學(xué)習(xí)愉快!


0 人點(diǎn)贊