#python
Вопрос:
Я должен посчитать, сколько раз слово используется в предложении. Я нашел решение, однако я хочу, чтобы код был более кратким, и хочу решить его с помощью понимания словаря. Может кто-нибудь, пожалуйста, помочь мне понять, что не так со следующим кодом?
user_input = input().lower().split()
usage_dict = dict()
usage_dict = {word:usage_dict.get(word, 0) 1 for word in user_input}
print(usage_dict)
Ввод : a aa abC aa ac abc bcd a
Выход : {'a': 1, 'aa': 1, 'abc': 1, 'ac': 1, 'bcd': 1}
Ожидаемые результаты: {'a': 2, 'aa': 2, 'abc': 2, 'ac': 1, 'bcd': 1}
Ответ №1:
Проблема
Словарь usage_dict
создается после завершения понимания диктанта, нет понятия временного состояния диктанта, поэтому usage_dict.get(word, 0)
всегда дает 0
Это работает только в цикле for:
usage_dict = {}
for word in user_input:
usage_dict[word] = usage_dict.get(word, 0) 1
Решения
Воспользуйся list.count()
usage_dict = {word: user_input.count(word) for word in set(user_input)}
Используйте collections.Counter
, который использует тот же цикл для, что и выше
usage_dict = Counter(user_input)
Комментарии:
1. Я не знал, что словарь не обновляется с каждой итерацией в понимании диктанта. Теперь я знаю! @азро
2. @RahulDeshmukh это то же самое для понимания списка
3. @RahulDeshmukh Вы можете подумать о принятии ответа, если он вас удовлетворит 😉
4. Да, stackoverflow попросил меня подождать еще 3 минуты, чтобы принять ответ 🙂
Ответ №2:
Попробуйте использовать Counter
from collections import Counter
user_input = input().lower().split()
usage_dict = Counter(user_input)
print(usage_dict)
Или:
usage_dict = {x:user_input.count(x) for x in user_input}
ВОЗВРАТ
{'a': 2, 'aa': 2, 'abc': 2, 'ac': 1, 'bcd': 1}
Комментарии:
1. Я бы сказал, что ответ, должен … ответить на вопрос. что здесь «что не так со следующим кодом?» А ты этого не делаешь 😉
Ответ №3:
Используйте Счетчик. Смотреть ниже
from collections import Counter
data = 'a aa abC aa ac abc bcd a'.split()
c = Counter(data)
print(c)
выход
Counter({'a': 2, 'aa': 2, 'abC': 1, 'ac': 1, 'abc': 1, 'bcd': 1})
Комментарии:
1.Я бы сказал, что ответ, должен … ответить на вопрос. что здесь «что не так со следующим кодом?» А ты этого не делаешь 😉
Ответ №4:
Вы могли бы использовать понимание словаря:
user_input = input().lower().split()
usage_dict = {word: user_input.count(word) for word in user_input}
print(usage_dict)
Или использовать collections.Counter
:
import collections
user_input = input().lower().split()
usage_dict = collections.Counter(user_input)
print(usage_dict)
Вывод обоих кодов:
{'a': 2, 'aa': 2, 'abc': 2, 'ac': 1, 'bcd': 1}
Причина, по которой это не работает, заключается в том, что получение количества значений в середине понимания словаря не работает, потому что сначала нужно завершить понимание словаря, а затем назначить его в качестве переменной с именем usage_dict
.
Комментарии:
1. Я бы сказал, что ответ, должен … ответить на вопрос. что здесь «что не так со следующим кодом?» А ты этого не делаешь 😉
2. @azro отредактировал мой ответ с объяснением