如何使用字典 .get 方法进行计数



所以我想设置一个函数,它接受一个字符串,基本上计算一个字母重复了多少次,我想用字典来做。我使用了 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) + 1Counter解决方案之外,我想指出defaultdict的存在:

from collections import defaultdict
def histogram(s):
    d = defaultdict(int)
    for c in s:
        d[c] += 1
    return d

defaultdict从不提出KeyError.它使用构造函数(类或函数(进行初始化。如果缺少键,则在恢复正常操作之前,将调用不带参数的构造函数,并将返回的值分配给键。

在这种情况下,我会使用 Counter ,但defaultdict在更一般的情况下很有用。

最新更新