|
|||||||
Занятие 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)) for line in range(int(input())): dict[word] = dict.get(word,0)+1 |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|