Как написать функцию, которая измеряет частоту каждой строки (объектов) - Python

1

Напишите функцию create_dictionary (имя файла), которая читает именованный файл, и возвращает сопоставление словаря из имен объектов в число совпадений (количество раз, когда определенный объект был угадан). Например, учитывая файл mydata.txt, содержащий следующее:

abacus
calculator
modern computer
abacus
modern computer
large white thing
modern computer

Итак, когда я вхожу в это:

dictionary = create_dictionary('mydata.txt')
for key in dictionary:
print(key + ': ' + str(dictionary[key]))

Функция должна возвращать следующий формат словаря:

{'abacus': 2, 'calculator': 1, 'modern computer': 3, 'large white thing': 1}

Между прочим, я знаю, как считать частоту слов. Но как подсчитать частоту каждой линии, как указано выше?

Вот некоторые ограничения:

  • Вы можете предположить, что данный файл существует, но он может быть пустым (т.е. Не содержать строк).
  • Ключи должны быть вставлены в словарь в том порядке, в котором они отображаются во входном файле.
  • В некоторых тестах мы показываем ключи в порядке ввода; в других были отсортированы по алфавиту.
  • Ведущее и конечное пробелы должны быть удалены из имен объектов
  • Пустые имена объектов (например, пустые строки или строки только с пробелами) следует игнорировать.
  • 1
    Что ты на сегодня сделал?
  • 1
    Как я уже сказал, сейчас я жую кутикулу. Я знаю, как обрабатывать слова в текстовом файле, но частота фраз меня парализует.
Показать ещё 5 комментариев
Теги:
python-3.x

2 ответа

1

Один из простых способов добиться - использовать следующие

Пусть имя файла a.txt

from collections import Counter
s = open('a.txt','r').read().strip()
print(Counter(s.split('\n')))

Выход будет следующим:

Counter({'abacus': 2,
         'calculator': 1,
         'large white thing': 1,
         'modern computer': 3})
  • 0
    Если мы используем предоставленный мной скрипт вывода, ответ все еще остается проблематичным.
  • 1
    В выражении print() отсутствует закрывающая скобка.
Показать ещё 2 комментария
0

В дополнение к тому, что предложил @bigbounty, вот что я мог придумать.

from collections import Counter
def create_dictionary(filename):
    """Blah"""
    keys = Counter()
    s = open(filename,'r').read().strip()
    keys = (Counter(s.split('\n')))
    return keys

Итак, если я набираю:

dictionary = create_dictionary('mydata.txt')
for key in dictionary:
   print(key + ': ' + str(dictionary[key]))

Я получил:

abacus: 2
calculator: 1
modern computer: 3
large white thing: 1

Но мне нужна помощь: "Как ничего не печатать, если текстовый файл пуст?"

Например: рассмотрим пустой текстовый файл ("nothing.txt"). Ожидаемый результат пуст. Но я не знаю, как опустить значение по умолчанию ' : 1 ' для ключей. Есть рекомендации?

  • 1
    Если файл пуст, вы можете использовать open('a.txt','r').read() == '' что приводит к true
  • 0
    Но функция должна определить, является ли текстовый файл пустым, и если да, функция должна печатать пустым. Как я могу это сделать? В настоящее время я получаю ": 1" в качестве вывода. Но мне нужно, чтобы вывод был пустым.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню