亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Python 基礎(chǔ)教程

Python 流程控制

Python 函數(shù)

Python 數(shù)據(jù)類(lèi)型

Python 文件操作

Python 對(duì)象和類(lèi)

Python 日期和時(shí)間

Python 高級(jí)知識(shí)

Python 參考手冊(cè)

Python 字典理解

在本教程中,我們將學(xué)習(xí)Python字典理解以及如何在示例的幫助下使用它。

字典是Python中的數(shù)據(jù)類(lèi)型,可讓我們將數(shù)據(jù)存儲(chǔ)在鍵/值對(duì)中。例如:

my_dict = {1: 'apple', 2: 'ball'}

要了解有關(guān)它們的更多信息,請(qǐng)?jiān)L問(wèn):Python字典

Python中的字典理解是什么?

字典理解是創(chuàng)建字典的一種優(yōu)雅簡(jiǎn)潔的方法。

示例1:字典理解

考慮以下代碼:

square_dict = dict()
for num in range(1, 11):
    square_dict[num] = num*num
print(square_dict)

現(xiàn)在,讓我們使用字典理解函數(shù),在上述程序中創(chuàng)建字典。

# 字典理解示例
square_dict = {num: num*num for num in range(1, 11)}
print(square_dict)

兩個(gè)程序的輸出將相同。

{1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}

在這兩個(gè)程序中,我們都創(chuàng)建了square_dict帶有數(shù)字平方鍵/值對(duì)的字典。

但是,使用字典理解可以使我們在一行中創(chuàng)建字典

使用字典理解

從上面的示例中,我們可以看到字典理解應(yīng)該以特定的模式編寫(xiě)。

字典理解的最小語(yǔ)法為:

dictionary = {key: value for vars in iterable}

讓我們將此語(yǔ)法與上例中的字典理解進(jìn)行比較。

Python字典理解

現(xiàn)在,讓我們看看如何使用另一個(gè)字典中的數(shù)據(jù)來(lái)使用字典理解。

示例3:如何使用字典理解

#item price in dollars
old_price = {'milk': 1.02, 'coffee': 2.5, 'bread': 2.5}

dollar_to_pound = 0.76
new_price = {item: value*dollar_to_pound for (item, value) in old_price.items()}
print(new_price)

輸出結(jié)果

{'milk': 0.7752, 'coffee': 1.9, 'bread': 1.9}

在這里,我們可以看到我們以美元為單位檢索商品價(jià)格并將其轉(zhuǎn)換為英鎊。使用字典理解使此任務(wù)更加簡(jiǎn)單和短。

字典理解中的條件

我們可以通過(guò)添加條件來(lái)進(jìn)一步自定義字典理解。讓我們來(lái)看一個(gè)實(shí)例。

示例4:如果條件字典理解

original_dict = {'jack': 38, 'michael': 48, 'guido': 57, 'john': 33}

even_dict = {k: v for (k, v) in original_dict.items() if v % 2 == 0}
print(even_dict)

輸出結(jié)果

{'jack': 38, 'michael': 48}

我們可以看到,由于if字典理解中的子句,僅添加了具有偶數(shù)值的項(xiàng)目。

示例5:多重if條件字典理解

original_dict = {'jack': 38, 'michael': 48, 'guido': 57, 'john': 33}

new_dict = {k: v for (k, v) in original_dict.items() if v % 2 != 0 if v < 40}
print(new_dict)

輸出結(jié)果

{'john': 33}

在這種情況下,僅奇數(shù)值小于40的項(xiàng)目已添加到新字典中。

這是因?yàn)閕f字典理解中有多個(gè)子句。它們等效于and必須同時(shí)滿足兩個(gè)條件的操作。

示例6:if-else條件字典理解

original_dict = {'jack': 38, 'michael': 48, 'guido': 57, 'john': 33}

new_dict_1 = {k: ('old' if v > 40 else 'young')
    for (k, v) in original_dict.items()}
print(new_dict_1)

輸出結(jié)果

{'jack': 'young', 'michael': 'old', 'guido': 'old', 'john': 'young'}

在這種情況下,將通過(guò)子典理解來(lái)創(chuàng)建新字典。

價(jià)值大于等于40的商品的值為“old”,而其他商品的值為“young”。

嵌套字典理解

我們可以將字典理解本身添加到字典理解中以創(chuàng)建嵌套字典。讓我們來(lái)看一個(gè)實(shí)例。

示例7:具有兩個(gè)字典理解的嵌套字典

dictionary = {
    k1: {k2: k1 * k2 for k2 in range(1, 6)} for k1 in range(2, 5)
}
print(dictionary)

輸出結(jié)果

{2: {1: 2, 2: 4, 3: 6, 4: 8, 5: 10}, 
3: {1: 3, 2: 6, 3: 9, 4: 12, 5: 15},
4: {1: 4, 2: 8, 3: 12, 4: 16, 5: 20}}

正如您看到的,我們?cè)谇短鬃值渲袠?gòu)造了一個(gè)乘法表,用于2到4的數(shù)字。

每當(dāng)使用嵌套字典理解時(shí),Python都會(huì)首先從外部循環(huán)開(kāi)始,然后再進(jìn)入內(nèi)部循環(huán)。

因此,以上代碼等效于:

dictionary = dict()
for k1 in range(11, 16):
    dictionary[k1] = {k2: k1*k2 for k2 in range(1, 6)}
print(dictionary)

它可以進(jìn)一步展開(kāi):

dictionary = dict()
for k1 in range(11, 16):
    dictionary[k1] = dict()
    for k2 in range(1, 6):
        dictionary[k1][k2] = k1*k2
print(dictionary)

這三個(gè)程序都給我們相同的輸出。

使用字典理解的優(yōu)勢(shì)

如我們所見(jiàn),字典理解大大縮短了字典初始化的過(guò)程。它使代碼更具pythonic風(fēng)格。

在我們的代碼中使用字典理解可以縮短代碼行,同時(shí)保持邏輯完整。

使用字典理解的注意事項(xiàng)

盡管字典理解對(duì)于編寫(xiě)易于閱讀的優(yōu)雅代碼非常有用,但它們并非總是正確的選擇。

將它們用作:

  • 它們有時(shí)會(huì)使代碼運(yùn)行速度變慢,并占用更多內(nèi)存。

  • 它們還會(huì)降低代碼的可讀性。

我們絕不能僅僅為了使代碼單行而試圖在其中加入困難的邏輯或大量的字典理解。在這些情況下,最好選擇其他代替方法,例如循環(huán)。