2016-08-22 59 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