所以我想设置一个带字符串的函数,基本上计算一个字母重复的次数,我想用字典来做。我使用了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循环中的额外字母?
答案 0 :(得分:1)
这正是collections.Counter
的用途:
from collections import Counter
g = Counter('bronto')
但是,如果您想使用普通dict
和dict.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) + 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
在更常见的情况下非常有用。