Создать словарь из вводимых слов с их количеством
С клавиатуры вводятся слова через запятую с пробелом. Нужно составить словарь, в котором ключами будут встреченные слова, а значениями - их количество в строке (слова могут повторяться). Если вводится пробел, то выводится пустой словарь, если слово с пробелом, то слово в словаре без пробела.
s = input()
s = s.split(', ')
d = {}
for word in s:
d[word] = d.get(word, 0) + 1
print (d)
Этот код выводит словарь со словами и их количеством в тексте. Но если задать пробел или слово без запятой и с пробелом, он не выводит пустой словарь или слово без пробела.Т.е. Если мы задаём Dfg, dfg, dfg, sdf, sdf, dfh он выведет {"Dfg":1, "dfg":2, "sdf":2, "dfh":1}, что и требуется. Но если задать пробел [ ] он выводит {" ": 1}, а необходимо пустой словарь {}. Если задать слово без запятой, но с пробелом [dfg_] то выводит {"dfg_" : 1}, а нужно {"dfg" : 1}. Как задать условие на разделение слов? Или как задать условие на эти частные случаи?
Ответы (3 шт):
Это происходит так как вы указали программе разделять слова по ", " запятой + пробел, а если нету запятой то код думает что это не разделитель, а отдельное слово
s = input()
s = s.split(', ') #Вот
d = {}
for word in s:
d[word] = d.get(word, 0) + 1
print (d)
d = {}
for word in input().split(','):
word = word.strip() # убрать лишние пробелы по бокам слов
if word: # проверка, что слово получилось не пустое
d[word] = d.get(word, 0) + 1
print(d)
А можно использовать готовый счётчик Counter.
words = list(map(str.strip, input().split(',')))
dt = {w: words.count(w) for w in set(words)}
или
import collections
dt = dict(collections.Counter(map(str.strip, input().split(','))))