2016-11-19 7 views
0

В моей домашней задаче этот вопрос просит меня сделать функцию, в которой Python должен создавать словарь о том, сколько слов, начинающихся с определенной буквы в длинной строке, является симметричным. Симметричный означает, что слово начинается с одной буквы и заканчивается тем же письмом. Мне не нужна помощь в этом алгоритме. Я определенно знаю, что у меня все в порядке, но мне просто нужно исправить эту ошибку ключа, которую я не могу понять. Я написал d[word[0]] += 1, что должно добавить 1 к частоте слов, начинающихся с этой конкретной буквы.Ключевые ошибки в словаре. Как заставить Python печатать мой словарь?

Вывод должен выглядеть следующим образом (используя строку I представленную ниже): {'d': 1, 'i': 3, 't': 1}

t = '''The sun did not shine 
it was too wet to play 
so we sat in the house 
all that cold cold wet day 

I sat there with Sally 
we sat there we two 
and I said how I wish 
we had something to do''' 

def symmetry(text): 
    from collections import defaultdict 
    d = {} 
    wordList = text.split() 
    for word in wordList: 
     if word[0] == word[-1]: 
      d[word[0]] += 1 
    print(d) 
print(symmetry(t)) 

ответ

1

Вы пытаетесь увеличить ценность записи, которая до сих пор не сделаны в результате KeyError. Вы можете использовать get(), если нет ключа для ключа; будет произведено значение 0 (или любое другое значение, которое вы выберете). С помощью этого метода вам не понадобится defaultdict (, хотя очень полезно в некоторых случаях).

def symmetry(text): 
    d = {} 
    wordList = text.split() 
    for word in wordList: 
     key = word[0] 
     if key == word[-1]: 
      d[key] = d.get(key, 0) + 1 
    print(d) 
print(symmetry(t)) 

Пример вывода

{'I': 3, 'd': 1, 't': 1} 
+1

Спасибо! Это правильный способ сделать это! Это сработало! Надеюсь, в будущем я не получу ключевых ошибок, используя ваш код (часть, которую вы исправили у меня) – Jorgan

1

Вы фактически никогда не использовать collections.defaultdict, хотя вы его импортировать. Инициализируйте d как defaultdict(int), а не как {}, и вам хорошо идти.

def symmetry(text): 
    from collections import defaultdict 
    d = defaultdict(int) 
    wordList = text.split() 
    for word in wordList: 
     if word[0] == word[-1]: 
      d[word[0]] += 1 
    print(d) 

print(symmetry(t)) 

Результаты в:

defaultdict(<class 'int'>, {'I': 3, 't': 1, 'd': 1}) 

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

  • Нет связанных вопросов^_^