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

时间:2017-03-16 21:52:19

标签: python dictionary

所以我想设置一个带字符串的函数,基本上计算一个字母重复的次数,我想用字典来做。我使用了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循环中的额外字母?

3 个答案:

答案 0 :(得分:1)

这正是collections.Counter的用途:

from collections import Counter
g = Counter('bronto')

但是,如果您想使用普通dictdict.get,则需要处理dict.get的返回值,例如:

d[c] = d.get(c, 0) + 1

答案 1 :(得分:0)

在尝试添加条目之前,您将要检查字典中是否存在该条目。到目前为止,你所写的最简单的扩展是在你去的时候检查每个角色。

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)

答案 2 :(得分:0)

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在更常见的情况下非常有用。