引言
作為一種高級編程語言,Python在許多方面都非常方便和易用,其強大的數據結構和函數庫尤其讓廣大程序員愛不釋手。其中,defaultdict是Python內置的一個特殊字典,可以在定義時為字典提供一個默認值,讓程序更為簡潔和高效。本文將對Python中的defaultdict進行詳細講解,希望能夠幫助讀者更好地使用Python。
正文
一、defaultdict的基本用法
Python中的defaultdict是一個正常的字典(dict)類型,與字典唯一的區別在於,當訪問一個不存在的鍵(key)時,defaultdict會自動創建這個鍵,並將其對應的值設置為一個默認值。這可以在一些情況下,特別是在處理dict重複鍵的情況下,非常有用。
defaultdict對象的定義方式和字典(dict)是類似的,只需要使用collections庫中的defaultdict類,並在實例化時傳遞一個函數作為默認值即可,具體用法如下:
from collections import defaultdict d = defaultdict(int) d['a'] += 1 d['b'] += 1 print(d) # defaultdict(, {'a': 1, 'b': 1})
可以看到,這裡我們定義了一個defaultdict對象d,並將其默認值設置為int類型,然後我們向d中加入了兩個鍵值對,並分別為鍵’a’和鍵’b’賦值1。最後列印輸出d的值,可以看到d中的鍵’a’對應的值為1,鍵’b’對應的值也為1。
這個例子中最關鍵的部分是defaultdict的定義方式d = defaultdict(int),其中函數int()作為了默認值。這將會使得在以後訪問不存在的鍵時,defaultdict都會將其對應的值默認設置為0。
二、使用自定義函數設置defaultdict的默認值
在前面的例子中,我們已經了解了如何使用默認值int()來創建defaultdict對象。實際上,在Python中,我們可以使用任何可以在字典中用作值的函數作為defaultdict的默認值。這意味著我們可以定義一個自定義的函數作為默認值,從而使defaultdict更加靈活。
例如,我們定義一個函數findMyName,該函數在默認情況下返回字元串「unknown」,在這個函數的基礎上,我們就可以創建一個默認值為「unknown」的defaultdict對象,如下所示:
def findMyName(): return 'unknown' favorite_colors = defaultdict(findMyName) print(favorite_colors['Tom']) # unknown print(favorite_colors['Jerry']) # unknown
這裡我們定義了函數findMyName,該函數返回一個默認的字元串「unknown」。然後我們定義了一個defaultdict對象favorite_colors,並將其默認值設置為findMyName函數,並使用該defaultdict對象分別訪問了Tom和Jerry兩個鍵,可以看到輸出的結果都是字元串「unknown」。
三、使用lambda函數作為defaultdict的默認值
除了直接定義一個函數之外,我們還可以使用Python中的lambda函數來設置defaultdict的默認值。Lambda函數可以在Python中非常方便地定義一些小型的匿名函數。
以一個簡單的計數器為例,我們可以使用lambda函數來定義一個匿名函數:
from collections import defaultdict counter = defaultdict(lambda: 0) counter['a'] += 1 counter['b'] += 2 counter['c'] += 3 print(counter) # defaultdict(<function at 0x0000027D4D07C940>, {'a': 1, 'b': 2, 'c': 3})
這裡我們定義了一個名為counter的defaultdict對象,並使用lambda函數來設置其默認值。當我們向counter中加入鍵值對時,如果該鍵不存在,defaultdict就會自行調用lambda函數,並將其返回的值作為該鍵的默認值來創建一個空字典。
四、結合set和list的defaultdict
除了字典類型的defaultdict之外,我們還可以使用defaultdict來構建set和list類型的對象。這在一些需要去重或者統計元素出現次數等需求時非常實用。
以一個簡單的統計單詞出現次數的例子來說明:假設我們有一個字元串,我們要統計其中每個單詞出現的次數。我們可以使用defaultdict來統計,代碼如下:
from collections import defaultdict sentence = 'this is a test of defaultdict' word_count = defaultdict(int) # 利用split方法分割字元串,生成單詞列表 for word in sentence.split(): word_count[word] += 1 print(word_count) # defaultdict(, {'this': 1, 'is': 1, 'a': 1, 'test': 1, 'of': 1, 'defaultdict': 1})
在這個例子中,我們定義了一個defaultdict對象word_count,並將其默認值設置為0。然後我們將字元串sentence按單詞分割,並遍歷每個單詞,使用defaultdict統計每個單詞出現的次數。
需要注意的是,在使用defaultdict統計時,我們只需要在遍歷每個單詞時,直接對word_count中的對應單詞計數器+1即可。不需要再次判斷鍵是否存在,defaultdict會自動幫助我們完成所有操作。
除了可以用於統計單詞出現次數之外,defaultdict還可以用於構建set和list類型的對象。例如,我們可以使用defaultdict來構建一個包含同一元素多次出現的列表:
from collections import defaultdict word_list = ['apple', 'banana', 'apple', 'pear', 'banana', 'orange'] word_count = defaultdict(list) for word in word_list: word_count[word].append(word) print(dict(word_count)) # {'apple': ['apple', 'apple'], 'banana': ['banana', 'banana'], 'pear': ['pear'], 'orange': ['orange']}
在這個例子中,我們定義了一個列表類型的defaultdict對象word_count,並對word_list列表中的每個元素使用append方法添加到word_count中對應的鍵值列表中。最終輸出的結果是一個字典,其中每個鍵都對應一個列表,列表包含了同一元素的多次出現。
小結
本文主要對Python中的defaultdict進行了詳細講解,包括了defaultdict的基本用法、使用自定義函數設置defaultdict的默認值、使用lambda函數作為defaultdict的默認值、以及結合set和list的defaultdict。
使用defaultdict可以幫助我們更加方便地處理Python中的字典類型數據,並使代碼更加整潔和高效。希望本文能夠對讀者有所幫助。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/230721.html