2016-08-22 56 views
-3

我是一名Python初学者,我试图解决一个编码问题,得到了这个错误。不明白为什么?我在这里经历了几个Q/A,但他们似乎没有解决我的问题。基本上我想要做的是遍历一个字符串,通过它的字符并将这些字符填充到字典中。字符是键和值是这些字符出现的次数。所以我想以下几点:关键错误:'x' - >在for循环中添加键值对,键是char

def myfunc(mystring): 
for i in mystring: 
    if charCounter[i]: 
     charCounter[i] += 1 
    charCounter[i] = 1 

mystring = "hello! how are you ?" 
myfunc(mystring) 

,并即时得到以下错误:

File "xyq.py", line 3, in myfunc if CharCounter[i]: KeyError: 'h'

可有人请建议,我要去哪里错了?如果可能,我该如何改进代码?

感谢

+0

您的示例不可重现。什么是'charCounter'?它在哪里初始化? – Julien

+0

对不起!不知何故,我错过了我的代码。 charCounter是一本字典 charCounter = {}这是在myfunc顶部声明的。 – CodeInfinity

+0

@CodeInfinity你可以重新编辑你的问题。请这样做以提高未来读者的质量。谢谢。 – buhtz

回答

0

您需要检查是否icharCounter尝试之前检索它:

if i in charCounter: 
    charCounter[i] += 1 
else: 
    charCounter[i] = 1 

或者:

if charCounter.get(i): 
    ... 
+0

嗨,扎克! 感谢您的建议。 charCounter实际上是一个在myfunc中声明的空字典。不知何故,我错过了写在这里。在这种情况下可以做些什么? – CodeInfinity

0
if charCounter[i]: 

抛出KeyError如果关键不存在。你想做什么isuse 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是字典的一个子类,所以它的行为会以同样的方式,一个普通的字典将做项目的访问等等。

+0

嗨! 感谢您的建议。 charCounter实际上是一个在myfunc中声明的空字典。不知何故,我错过了写在这里。在这种情况下可以做些什么? – CodeInfinity

+0

@CodeInfinity修复 –

+0

谢谢@Antii,我会试试这个 – CodeInfinity