MyTetra Share
Делитесь знаниями!
Занятие 11. Словари Задача «Частотный анализ»
Время создания: 03.09.2017 18:02
Текстовые метки: task
Раздел: Python - Задачник - Hash
Запись: xintrea/mytetra_db_mcold/master/base/15044509359yppypjzz1/text.html на raw.githubusercontent.com

Условие

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

Указание. После того, как вы создадите словарь всех слов, вам захочется отсортировать его по частоте встречаемости слова. Желаемого можно добиться, если создать список, элементами которого будут кортежи из двух элементов: частота встречаемости слова и само слово. Например, [(2, 'hi'), (1, 'what'), (3, 'is')]. Тогда стандартная сортировка будет сортировать список кортежей, при этом кортежи сравниваются по первому элементу, а если они равны — то по второму. Это почти то, что требуется в задаче.


Мое решение:

n, d = int(input()), dict()

for i in range(n):

for x in input().split(): d[x] = d.get(x, 0) + 1

for j in range(max(d.values()), 0, -1):

for k in sorted(x for x in d if d[x] == j)



Решение разработчиков

from collections import Counter


words = []

for _ in range(int(input())):

words.extend(input().split())


counter = Counter(words)

pairs = [(-pair[1], pair[0]) for pair in counter.most_common()]

words = [pair[1] for pair in sorted(pairs)]

print('\n'.join(words))


Yulia Zax

dict = {}

for line in range(int(input())):

for word in input().split():

dict[word] = dict.get(word,0)+1

a = []

for word in dict:

a.append((1000-dict[word],word))

[print(tuple[1]) for tuple in sorted(a)]

Так же в этом разделе:
 
MyTetra Share v.0.58
Яндекс индекс цитирования