2015-05-20 2 views
0

Я пытаюсь подсчитать количество каждого символа в строкеTypeError: неподдерживаемый тип (ы) операндом +: 'NoneType' и 'Int'

Мой код здесь:

def CharCount(string): 
    mydict = {} 
    for char in string: 
     mydict[char] = mydict.get(char) + 1 
    return '\n'.join(['%s,%s' % (c, n) for c, n in mydict.items()]) 
if __name__ == '__main__': 
    print CharCount("abcda") 

On работает над кодом я получаю ниже ошибки:

TypeError: unsupported operand type(s) for +: 'NoneType' and 'int' 
+0

'None' что' dict.get (символ) 'возвращает – vaultah

ответ

5

dict.get(key) возвращает None по умолчанию, если key не в словаре. Обеспечить полезное значение по умолчанию вместо:

for char in string: 
    mydict[char] = mydict.get(char, 0) + 1 

Однако существует лучший способ: collections.defaultdict:

from collections import defaultdict 
mydict = defaultdict(int) 
for char in string: 
    mydict[char] += 1 

или collections.Counter:

from collections import Counter 
mydict = Counter(string) 
1

Когда вы Aceess char впервые , dict.get(char) возвращение денег None, а не 0. Это должно решить:

mydict[char] = (mydict.get(char) if char in mydict else 0) + 1 
+2

О, @ тим-pietzcker ответ лучше. –

Смежные вопросы