所以我想设置一个函数,它接受一个字符串,基本上计算一个字母重复了多少次,我想用字典来做。我使用了 if else 语句,但现在我想使用 .get
方法。到目前为止,我的代码如下所示:
def histogram(s):
d = dict()
for c in s:
d.get(c)
d[c] = 1
return d
g = histogram('bronto')
print(g)
这将打印:
{'b': 1, 'r': 1, 'o': 1, 'n': 1, 't': 1}
但是,如您所见,应该有 2 个o
。我不能做d[c] += 1
,因为它以前没有声明过。如何让函数在 for 循环中计算额外的字母?
这正是collections.Counter
的用途:
from collections import Counter
g = Counter('bronto')
但是,如果要使用纯dict
s 和 dict.get
则需要处理 dict.get
的返回值,例如:
d[c] = d.get(c, 0) + 1
在尝试添加到字典之前,您需要检查该条目是否存在于字典中。到目前为止,您编写的内容的最简单扩展是随时检查每个字符。
def histogram(s):
d = dict()
for c in s:
if c in d:
d[c] += 1
else:
d[c] = 1
return d
g = histogram('bronto')
print(g)
除了d[c] = d.get(c, 0) + 1
和Counter
解决方案之外,我想指出defaultdict
的存在:
from collections import defaultdict
def histogram(s):
d = defaultdict(int)
for c in s:
d[c] += 1
return d
defaultdict
从不提出KeyError
.它使用构造函数(类或函数(进行初始化。如果缺少键,则在恢复正常操作之前,将调用不带参数的构造函数,并将返回的值分配给键。
在这种情况下,我会使用 Counter
,但defaultdict
在更一般的情况下很有用。