溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python的setdefault與defaultdict函數怎么用

發布時間:2022-01-17 15:21:43 來源:億速云 閱讀:197 作者:iii 欄目:大數據

Python的setdefault與defaultdict函數怎么用

在Python編程中,處理字典(dict)時,經常會遇到需要為不存在的鍵設置默認值的情況。為了簡化這一過程,Python提供了兩種非常有用的工具:setdefault方法和collections.defaultdict類。本文將詳細介紹這兩種方法的使用場景、區別以及如何在實際編程中應用它們。

1. setdefault方法

setdefault是Python字典對象的一個內置方法,用于獲取指定鍵的值。如果該鍵不存在,則設置一個默認值并返回該默認值。其語法如下:

dict.setdefault(key, default=None)
  • key:要查找的鍵。
  • default:如果鍵不存在時設置的默認值。如果未提供,則默認為None。

1.1 使用場景

假設我們有一個字典,用于記錄每個人的愛好。我們希望為每個人添加一個愛好,但如果該人尚未在字典中,我們希望為其初始化一個空列表。

hobbies = {}

# 使用setdefault方法
hobbies.setdefault('Alice', []).append('reading')
hobbies.setdefault('Bob', []).append('gaming')
hobbies.setdefault('Alice', []).append('hiking')

print(hobbies)

輸出結果為:

{'Alice': ['reading', 'hiking'], 'Bob': ['gaming']}

在這個例子中,setdefault方法首先檢查鍵是否存在。如果不存在,則將其初始化為一個空列表,然后返回該列表。如果鍵已經存在,則直接返回對應的值。這樣,我們可以輕松地為每個人添加多個愛好。

1.2 與直接賦值的區別

如果不使用setdefault,我們需要先檢查鍵是否存在,然后再決定是否初始化:

hobbies = {}

if 'Alice' not in hobbies:
    hobbies['Alice'] = []
hobbies['Alice'].append('reading')

if 'Bob' not in hobbies:
    hobbies['Bob'] = []
hobbies['Bob'].append('gaming')

if 'Alice' not in hobbies:
    hobbies['Alice'] = []
hobbies['Alice'].append('hiking')

print(hobbies)

雖然這段代碼也能達到同樣的效果,但它顯然更加冗長且容易出錯。setdefault方法簡化了這一過程,使得代碼更加簡潔和易讀。

2. defaultdict

defaultdictcollections模塊中的一個類,它是dict的一個子類。與普通字典不同,defaultdict在初始化時可以指定一個默認值工廠函數。當訪問一個不存在的鍵時,defaultdict會自動調用該工廠函數來生成默認值。

2.1 使用場景

繼續以記錄愛好的例子為例,我們可以使用defaultdict來簡化代碼:

from collections import defaultdict

hobbies = defaultdict(list)

hobbies['Alice'].append('reading')
hobbies['Bob'].append('gaming')
hobbies['Alice'].append('hiking')

print(hobbies)

輸出結果為:

defaultdict(<class 'list'>, {'Alice': ['reading', 'hiking'], 'Bob': ['gaming']})

在這個例子中,我們創建了一個defaultdict對象,并指定其默認值工廠函數為list。這意味著當我們訪問一個不存在的鍵時,defaultdict會自動調用list()來生成一個空列表作為默認值。

2.2 與setdefault的區別

雖然defaultdictsetdefault都可以用于處理不存在的鍵,但它們的使用場景和性能有所不同。

  • 使用場景setdefault適用于需要在特定情況下設置默認值的場景,而defaultdict適用于所有鍵都需要默認值的場景。
  • 性能defaultdict在訪問不存在的鍵時性能更好,因為它不需要每次都檢查鍵是否存在并設置默認值。而setdefault在每次調用時都需要檢查鍵是否存在,因此性能稍差。

2.3 自定義默認值工廠函數

defaultdict的默認值工廠函數不僅限于內置類型,還可以是任何可調用對象。例如,我們可以使用lambda函數來生成自定義的默認值:

from collections import defaultdict

# 使用lambda函數生成默認值
hobbies = defaultdict(lambda: ['unknown'])

hobbies['Alice'].append('reading')
hobbies['Bob'].append('gaming')

print(hobbies['Charlie'])  # 輸出: ['unknown']

在這個例子中,當我們訪問不存在的鍵'Charlie'時,defaultdict會自動調用lambda函數生成默認值['unknown']。

3. 實際應用示例

3.1 統計單詞頻率

假設我們有一個文本文件,我們希望統計每個單詞出現的頻率。我們可以使用defaultdict來簡化這一過程:

from collections import defaultdict

text = "this is a simple example example of a simple text"
words = text.split()

word_count = defaultdict(int)

for word in words:
    word_count[word] += 1

print(word_count)

輸出結果為:

defaultdict(<class 'int'>, {'this': 1, 'is': 1, 'a': 2, 'simple': 2, 'example': 2, 'of': 1, 'text': 1})

在這個例子中,我們使用defaultdict(int)來初始化一個默認值為0的字典。當我們訪問一個不存在的單詞時,defaultdict會自動將其值初始化為0,然后我們再進行加1操作。

3.2 分組數據

假設我們有一個包含多個人員信息的列表,我們希望按城市對人員進行分組。我們可以使用defaultdict來實現:

from collections import defaultdict

people = [
    {'name': 'Alice', 'city': 'New York'},
    {'name': 'Bob', 'city': 'Los Angeles'},
    {'name': 'Charlie', 'city': 'New York'},
    {'name': 'David', 'city': 'Chicago'},
    {'name': 'Eve', 'city': 'Los Angeles'},
]

city_groups = defaultdict(list)

for person in people:
    city_groups[person['city']].append(person['name'])

print(city_groups)

輸出結果為:

defaultdict(<class 'list'>, {'New York': ['Alice', 'Charlie'], 'Los Angeles': ['Bob', 'Eve'], 'Chicago': ['David']})

在這個例子中,我們使用defaultdict(list)來初始化一個默認值為空列表的字典。當我們訪問一個不存在的城市時,defaultdict會自動將其值初始化為空列表,然后我們將人員姓名添加到該列表中。

4. 總結

setdefault方法和defaultdict類都是處理字典中不存在的鍵時的有力工具。setdefault適用于需要在特定情況下設置默認值的場景,而defaultdict適用于所有鍵都需要默認值的場景。在實際編程中,根據具體需求選擇合適的工具可以大大簡化代碼并提高效率。

通過本文的介紹,希望讀者能夠掌握setdefaultdefaultdict的使用方法,并在實際項目中靈活運用它們。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女