Форум сайта python.su
Здравствуйте прохожу курс по Python и застрял на одной задаче. Собственно задача:
Напишите программу, которая считывает текст из файла (в файле может быть больше одной строки) и выводит самое частое слово в этом тексте и через пробел то, сколько раз оно встретилось. Если таких слов несколько, вывести лексикографически первое (можно использовать оператор < для строк).
Накидал вот такую программку:
import re string = "abc a bCd bC AbC BC BCD bcd ABC abc bcd bcd" string = string.lower() spisok = re.findall(r'\w+', string) dic = {} for i in spisok: if i in dic: dic[i] += 1 else: dic[i] = 1 for keys, values in dic.items(): print(keys, values) print(dic)
abc 4 bcd 5 bc 2 a 1
Отредактировано osipbananov (Апрель 4, 2016 16:52:15)
Офлайн
>>> from collections import Counter >>> s = "abc a bCd bC AbC BC BCD bcd ABC abc bcd bcd" >>> Counter(s.lower().split(" ")).most_common()[0] ('bcd', 5)
Отредактировано ayb (Апрель 4, 2016 16:49:28)
Офлайн
Спасибо, а можно как-нибудь без collections? Как- то поставить условие для вывода в моем коде
Отредактировано osipbananov (Апрель 4, 2016 16:58:07)
Офлайн
ayb - изящно! Но из обучения я так понимаю что надо без колллекций что бы логику отработать
Офлайн
Да именно
Офлайн
Есть такой вариант, но я не уверен подойдет ли такое ТСу:
>>> import operator >>> d = {"a": 100, "b": 13, "c": 10000} >>> d = sorted(d.items(), key=operator.itemgetter(1), reverse=True) >>> d[0] ('c', 10000)
Офлайн
Нет хотелось бы без импорта модулей, но все равно спасибо
Офлайн
>>> d = {"a": 100, "b": 13, "c": 10000} >>> >>> max(d.items(), key=lambda i: i[1]) ('c', 10000) >>>
Офлайн
А как сделать чтобы вывод был без скобок и кавычек, вот так: с 10000?
Офлайн
Что никто не знает?
Офлайн