Как создать словарь длин строк с помощью цикла for?

Я новичок в python, но основные команды знаю. Я пытаюсь создать цикл for, который при получении списка предложений добавляет ключ для длины каждого предложения. Значением каждого ключа будет частота этой длины предложения в списке, так что формат будет выглядеть примерно так:

dictionary = {length1:frequency, length2:frequency, etc.}

Кажется, я не могу найти какие-либо ранее отвеченные вопросы, касающиеся этого конкретно - создание ключей с использованием основных функций, а затем изменение значения ключа по частоте этого результата. Вот код, который у меня есть:

dictionary = {}
for i in sentences: 
    dictionary[len(i.split())] += 1

Когда я пытаюсь запустить код, я получаю это сообщение:

Traceback (most recent call last):
  File "<pyshell#11>", line 2, in <module>
    dictionary[len(i.split())] += 1
KeyError: 27

Будем очень признательны за любую помощь в исправлении моего кода и объяснение того, где я ошибся!


person boop    schedule 05.09.2016    source источник
comment
Какую версию Python вы используете? Я никогда не видел эту ошибку раньше.   -  person Rushy Panchal    schedule 05.09.2016
comment
Невозможно воспроизвести ошибку, вместо этого вы должны получить KeyError.   -  person Ahsanul Haque    schedule 05.09.2016
comment
Я использую Python 3.5, редактирую только с помощью IDLE.   -  person boop    schedule 05.09.2016
comment
@boop, см. второй добавленный комментарий. В нем есть ответ на ваш вопрос.   -  person Ahsanul Haque    schedule 05.09.2016
comment
После запуска строки, создающей сначала пустой словарь, а затем отдельно запускающего цикл for, я получил KeyError 27, я обновляю вопрос, чтобы отразить это   -  person boop    schedule 05.09.2016
comment
@idjaw Спасибо!   -  person boop    schedule 05.09.2016


Ответы (1)


Я думаю, что это решит вашу проблему в Python 3:

sentences ='Hi my name is xyz'
words = sentences.split()
dictionary ={}
for i in words: 
    if len(i) in dictionary:
        dictionary[len(i)]+=1
    else:
        dictionary[len(i)] = 1
print(dictionary)

Выход:

{2: 3, 3: 1, 4: 1}

В словаре сначала вы должны присвоить ключу какое-то значение, а затем только вы можете использовать это значение для дальнейших вычислений. Или же есть альтернативное использование defaultdict для присвоения значения по умолчанию для каждого ключа.

Надеюсь это поможет.

person Kalpesh Dusane    schedule 05.09.2016