2017-09-30 38 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)