关键错误:'x' - >在for循环中添加键值对,键为char

时间:2016-08-22 03:51:02

标签: python dictionary key

我是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'

有人可以建议,我哪里错了?如果可能的话,我该如何改进代码?

由于

2 个答案:

答案 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是字典的子类,因此它的行为方式与普通字典对项目访问的处理方式相同,等等。