Проблема в том, что эта строка:
dic[char] = (1,dic[char]+1)[char in dic]
равна с нетерпением , оценивая dic[char]+1
как часть построения tuple
для индексации до , которую вы получите до проверки, если char in dic
, чтобы выбрать элемент tuple
. Таким образом, он умирает с KeyError
до того, как ваш тест сможет предотвратить неудачный поиск. Чтобы сделать это ленивым, вы можете сделать:
dic[char] = dic[char] + 1 if char in dic else 1
или просто использовать метод, разработанный для этого , чтобы избежать явного теста:
dic[char] = dic.get(char, 0) + 1
Хотя этот конкретный шаблон стал еще проще с collections.Counter
:
import collections
def countLetter(string):
print(collections.Counter(string)) # print(dict(collections.Counter(string))) if it must look like a dict