Ошибка типа: индексы списка должны быть целыми числами, а не str в задаче списка

#python #python-3.x #list

#python #python-3.x #Список

Вопрос:

 book_title =  ['great', 'expectations','the', 'adventures', 'of', 'sherlock','holmes','the','great','gasby','hamlet','adventures','of','huckleberry','fin']
word_counter = []
for words in book_title:
    if words not in word_counter:
        word_counter[words]=1
    else:
        word_counter[words] =1
 

я получаю тип ошибки, которую я должен исправить, чтобы улучшить это

Ошибка типа: индексы списка должны быть целыми числами, а не str

Комментарии:

1. Вам нужно создать словарь вместо списка, чтобы сохранить количество слов

2. Вам может понадобиться dict . word_counter = {} .

3. Или просто: word_counter = Counter(book_title)

4. Пожалуйста, предоставьте полную обратную трассировку

Ответ №1:

Как отмечали другие, вы концептуально пытаетесь использовать словарь, а не список. Однако для подсчета существует специализированный словарь, collections.Counter который вы можете использовать следующим образом:

 from collections import Counter

word_counter = Counter(book_title)
 

что делает то же самое гораздо проще.

Ответ №2:

Вы должны использовать словарь для подсчета слов. Для этого лучше использовать defaultdict .

 from collections import defaultdict

book_title =  ['great', 'expectations','the', 'adventures', 'of', 'sherlock','holmes','the','great','gasby','hamlet','adventures','of','huckleberry','fin']
word_counter = defaultdict(int)
for word in book_title:
    word_counter[word]  = 1
 

Комментарии:

1. Я думаю, что если вы используете модуль collections, на самом деле лучше использовать Counter .

2. Да, я полагаю, это также может быть полезно в некоторых случаях.

Ответ №3:

 book_title =  ['great', 'expectations','the', 'adventures', 'of', 'sherlock','holmes','the','great','gasby','hamlet','adventures','of','huckleberry','fin']
word_counter = {} #use dict not list
for words in book_title:
    if words not in word_counter:
        word_counter[words]=1
    else:
        word_counter[words] =1
 

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

Pythonic способ

 from collections import Counter
book_title =  ['great', 'expectations','the', 'adventures', 'of', 'sherlock','holmes','the','great','gasby','hamlet','adventures','of','huckleberry','fin']
word_counter = Counter(book_title)