>>> import collections
>>> s = 'ddxxx'
>>> result = collections.Counter(s)
>>> result
Counter({'x': 3, 'd': 2})
>>> result['x']
3
>>> result['d']
2
当然,手动方式也可以,你的代码也可以。因为您得到了一个KeyError,所以您试图访问字典中不存在的键。当你碰巧遇到一个新角色,而这个角色之前你还没数过。您已经尝试过用if i in s检查来处理这个问题,但是您检查的内容是错误的。s是您的字符串,由于您要迭代字符串的字符i,因此i in s将始终为true。您需要检查的是i是否已经作为键存在于字典result中。因为如果它没有,你就把它作为一个计数为1的新键来添加:
使用
collections.Counter
是明智的解决方案。但是如果您想重新设计轮子,可以使用dict.get()
方法,该方法允许您为缺少的键提供默认值:输出
^{pr2}$使用^{} 可以很容易地解决这个问题。Counter是标准dict的一个子类型,用于计数。它将自动确保在您尝试增加以前字典中没有的内容时创建索引,因此您不需要自己检查它。在
也可以将任何iterable传递给构造函数,使其自动计算iterable中的项的出现次数。由于字符串是一个iterable字符,您只需将字符串传递给它,即可计算所有字符:
当然,手动方式也可以,你的代码也可以。因为您得到了一个
^{pr2}$KeyError
,所以您试图访问字典中不存在的键。当你碰巧遇到一个新角色,而这个角色之前你还没数过。您已经尝试过用if i in s
检查来处理这个问题,但是您检查的内容是错误的。s
是您的字符串,由于您要迭代字符串的字符i
,因此i in s
将始终为true。您需要检查的是i
是否已经作为键存在于字典result
中。因为如果它没有,你就把它作为一个计数为1
的新键来添加:问题是你的第二种情况。}
if i in s
正在检查字符串本身而不是字典中的字符。它应该是if i in result.keys()
,或者像Neil mentioned,它可以是{示例:
这会打印出来
^{pr2}$相关问题 更多 >
编程相关推荐