Я пытаюсь собрать список из файла .txt, подсчитать результаты, а затем распечатать их, как это

Bones found:
Ankylosaurus: 3
Pachycephalosaurus: 1   
Tyrannosaurus Rex: 1
Struthiomimus: 2

Пример точечного текстового файла:

Ankylosaurus
Pachycephalosaurus
Ankylosaurus
Tyrannosaurus Rex
Ankylosaurus
Struthiomimus
Struthiomimus

Мой текущий код извлекает все имена из файла .txt, за исключением того, что я полностью застрял оттуда

frequency = {}
for line in open('bones.txt'):
  bones = line.split()
  print(bones)

Любая помощь, пожалуйста?

0
Lachlan 21 Авг 2018 в 07:40

3 ответа

Лучший ответ

Использование collections.defaultdict

Пример:

from collections import defaultdict

d = defaultdict(int)

with open(filename) as infile:    #Open File
    for line in infile:           #Iterate Each Line
        d[line.strip()] += 1

print("Bones found:")        
for k, v in d.items():
    print("{}: {}".format(k, v))

Вывод:

Bones found:
Struthiomimus: 2
Pachycephalosaurus: 1
Ankylosaurus: 3
Tyrannosaurus Rex: 1
0
Rakesh 21 Авг 2018 в 05:34

Сохраните каждую строку как ключ словаря (инициализируется 0, если строка не в dict) и увеличивает значение:

frequency = {}
for line in open('bones.txt'):
  if line not in frequency:
    frequency[line] = 0

  frequency[line] += 1

for k, v in frequency.items():
  print('{}: {}'.format(k, v))
0
jh314 21 Авг 2018 в 04:43

Вы можете использовать функцию Counter из библиотеки коллекций, чтобы получить это.

from collections import Counter
f=open('bones.txt','r')
ls=f.readlines()
s=dict(Counter(ls))

for k in s.keys():
    print ('{}:{}'.format(k,s[k]))
0
Sreekiran 21 Авг 2018 в 05:39
51941664