我是python的初学者,我正在尝试解决编码问题,得到了这个错误。不明白为什么?我在这里经历了几个Q / A,但他们似乎没有解决我的问题。基本上我要做的是迭代一个字符串,通过它的字符并在字典中填充这些字符。字符是键,值是这些字符出现的次数。所以我正在尝试以下方法:
def myfunc(mystring):
for i in mystring:
if charCounter[i]:
charCounter[i] += 1
charCounter[i] = 1
mystring = "hello! how are you ?"
myfunc(mystring)
我得到了以下错误:
myfunc中的文件“xyq.py”,第3行 如果CharCounter [i]: KeyError:'h'
有人可以建议,我哪里错了?如果可能的话,我该如何改进代码?
由于
答案 0 :(得分:0)
在尝试检索之前,您需要检查i
是否在charCounter
中:
if i in charCounter:
charCounter[i] += 1
else:
charCounter[i] = 1
或者:
if charCounter.get(i):
...
答案 1 :(得分:0)
if charCounter[i]:
如果密钥不存在,则抛出KeyError
。您要做的是使用if i in charCounter:
代替:
if i in char_counter:
char_counter[i] += 1
else:
char_counter[i] = 1
或者您可以使用get
获取值(如果存在),或者返回第二个(可选)值(如果它不存在):
char_counter[i] = char_counter.get(i, 0) + 1
然而,这种计数模式非常受欢迎,因此存在一个完整的类:collections.Counter
:
from collections import Counter
def my_func(my_string):
return Counter(my_string)
示例:
>>> counts = my_func('hello! how are you ?')
>>> counts
Counter({' ': 4, 'o': 3, 'h': 2, 'l': 2, 'e': 2, '!': 1, 'r': 1, 'a': 1,
'?': 1, 'w': 1, 'u': 1, 'y': 1})
>>> counts[' ']
4
collections.Counter
是字典的子类,因此它的行为方式与普通字典对项目访问的处理方式相同,等等。