自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python 中的 defaultdict 有什么用的?

開發(fā) 前端
defaultdict? 是 Python 中一個(gè)非常實(shí)用的數(shù)據(jù)結(jié)構(gòu)工具,可以在訪問(wèn)不存在的鍵時(shí)返回一個(gè)默認(rèn)值。通過(guò)使用 ?defaultdict?,我們可以簡(jiǎn)化代碼,提高效率,并且使代碼更加易讀。它特別適用于計(jì)數(shù)器和分組等常見(jiàn)場(chǎng)景。?

在 Python 的標(biāo)準(zhǔn)庫(kù)中,有一個(gè)非常有用的數(shù)據(jù)結(jié)構(gòu)工具叫做 defaultdict。它是 collections 模塊的一部分,提供了一種特殊的字典類型,可以在訪問(wèn)不存在的鍵時(shí)返回一個(gè)默認(rèn)值。本文將介紹 defaultdict 的用法,包括其基本語(yǔ)法、常見(jiàn)用例。

1. 基本語(yǔ)法

defaultdict 類的構(gòu)造函數(shù)與普通字典的構(gòu)造函數(shù)類似,但需要傳入一個(gè)默認(rèn)工廠函數(shù)作為參數(shù)。默認(rèn)工廠函數(shù)用于在訪問(wèn)不存在的鍵時(shí)返回一個(gè)默認(rèn)值。以下是 defaultdict 的基本語(yǔ)法:

from collections import defaultdict

d = defaultdict(default_factory)

在上述代碼中,default_factory 是一個(gè)函數(shù)對(duì)象,用于定義默認(rèn)值的生成規(guī)則。

2. 常見(jiàn)用例

a. 計(jì)數(shù)器

一個(gè)常見(jiàn)的用例是使用 defaultdict 實(shí)現(xiàn)計(jì)數(shù)器。假設(shè)我們有一個(gè)列表,想要統(tǒng)計(jì)每個(gè)元素出現(xiàn)的次數(shù)??梢允褂?defaultdict 來(lái)簡(jiǎn)化代碼:

from collections import defaultdict

counter = defaultdict(int)
data = [1, 2, 3, 1, 2, 3, 4, 5, 4, 3, 2, 1]

for num in data:
   counter[num] += 1

print(counter)

輸出:

defaultdict(<class 'int'>, {1: 3, 2: 3, 3: 3, 4: 2, 5: 1})

解析:在上述代碼中,我們創(chuàng)建了一個(gè) defaultdict 對(duì)象 counter,并將 int 函數(shù)作為默認(rèn)工廠函數(shù)。在遍歷列表 data 時(shí),我們對(duì) counter[num] 進(jìn)行自增操作,由于初始時(shí) counter 中不存在鍵 num,defaultdict 會(huì)自動(dòng)使用 int 函數(shù)生成一個(gè)默認(rèn)值 0,然后執(zhí)行自增操作。最終,我們得到了每個(gè)元素出現(xiàn)次數(shù)的統(tǒng)計(jì)結(jié)果。

b. 分組

另一個(gè)常見(jiàn)的用例是使用 defaultdict 進(jìn)行分組。假設(shè)我們有一個(gè)包含學(xué)生姓名和對(duì)應(yīng)班級(jí)的列表,想要按班級(jí)將學(xué)生分組??梢允褂?defaultdict 來(lái)實(shí)現(xiàn):

from collections import defaultdict

students = [('Alice', 'A'), ('Bob', 'B'), ('Charlie', 'A'), ('Dave', 'B')]

grouped_students = defaultdict(list)

for name, group in students:
   grouped_students[group].append(name)

print(grouped_students)

輸出:

defaultdict(<class 'list'>, {'A': ['Alice', 'Charlie'], 'B': ['Bob', 'Dave']})

解析:在上述代碼中,我們創(chuàng)建了一個(gè) defaultdict 對(duì)象 grouped_students,并將 list 函數(shù)作為默認(rèn)工廠函數(shù)。在遍歷學(xué)生列表 students 時(shí),我們將每個(gè)學(xué)生的姓名 name 添加到對(duì)應(yīng)班級(jí) group 的列表中。由于初始時(shí) grouped_students 中不存在鍵 group,defaultdict 會(huì)自動(dòng)使用 list 函數(shù)生成一個(gè)空列表,然后將學(xué)生姓名添加到列表中。最終,我們得到了按班級(jí)分組的學(xué)生列表。

結(jié)論

defaultdict 是 Python 中一個(gè)非常實(shí)用的數(shù)據(jù)結(jié)構(gòu)工具,可以在訪問(wèn)不存在的鍵時(shí)返回一個(gè)默認(rèn)值。通過(guò)使用 defaultdict,我們可以簡(jiǎn)化代碼,提高效率,并且使代碼更加易讀。它特別適用于計(jì)數(shù)器和分組等常見(jiàn)場(chǎng)景。

責(zé)任編輯:武曉燕 來(lái)源: 科學(xué)隨想錄
相關(guān)推薦

2024-02-19 00:00:00

Python?starmap函數(shù)

2024-02-22 12:18:16

Python函數(shù)用法

2023-07-21 17:08:30

2024-08-28 11:58:02

2020-04-23 14:09:13

URI挖坑前端

2024-01-25 10:23:22

對(duì)象存儲(chǔ)存儲(chǔ)數(shù)據(jù)

2020-12-22 10:12:40

Python科學(xué)機(jī)器學(xué)習(xí)

2023-12-20 14:48:26

2009-06-17 15:51:55

java有什么用

2017-11-22 15:50:58

Netty微服務(wù)RPC

2022-05-05 07:38:32

volatilJava并發(fā)

2017-09-19 15:22:44

2020-08-10 07:44:13

虛擬內(nèi)存交換內(nèi)存Linux

2021-04-24 10:59:30

CSS偽類占位符

2022-07-29 08:25:02

volatileC語(yǔ)言原子

2021-02-21 23:49:45

比特幣貨幣人民幣

2019-10-14 10:29:42

Java消息隊(duì)列

2023-05-20 17:48:39

Linux/tmp/var/tmp

2017-04-18 16:08:01

NAS存儲(chǔ)移動(dòng)設(shè)備

2023-09-07 23:06:07

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)