2017-09-30 69 views
0

我從書中得到了這段代碼使用Python自動化無聊的東西,我不明白setdefault()方法如何計算唯一字符的數量。dict.setdefault()如何計算字符數?

代碼:

message = 'It was a bright cold day in April, and the clocks were striking thirteen.' 
count = {} 
for character in message: 
    count.setdefault(character, 0) 
    count[character] = count[character] + 1 
print(count) 

根據這本書,在字典中的關鍵,如果沒有找到setdefault()方法搜索更新的單詞表,如果發現什麼都不做。 但我不明白setdefault的計數行爲以及它是如何完成的?

輸出:

{' ': 13, ',': 1, '.': 1, 'A': 1, 'I': 1, 'a': 4, 'c': 3, 'b': 1, 'e': 5, 'd': 3, 'g': 2, 
'i': 6, 'h': 3, 'k': 2, 'l': 3, 'o': 2, 'n': 4, 'p': 1, 's': 3, 'r': 5, 't': 6, 'w': 2, 'y': 1} 

請給我講解一下。

+2

'setdefault'不計數,但確保有一個0開始計數。嘗試刪除它看看會發生什麼。 –

回答

0

在您的例子setdefault()相當於該代碼...

if character not in count: 
    count[character] = 0 

這是做同樣的事情,一個更好的方式:

from collections import defaultdict 
message = 'It was a bright cold day in April, and the clocks were striking thirteen.' 
count = defaultdict(int) 
for character in message: 
    count[character] = count[character] + 1 
print(count) 
0

這將是更好地使用defaultdict至少在這種情況下。

from collections import defaultdict 
count = defaultdict(int) 
for character in message: 
    count[character] += 1 

甲defaultdict構造有其產生的任何默認值應該是一個實例的無參數函數。如果一個關鍵字不存在,那麼這個函數爲它提供一個值,並在你的字典中插入鍵值。由於int()返回0,因此在這種情況下它將被正確初始化。如果你想它初始化爲其他值n,那麼你會做類似

count = defaultdict(lambda : n)