Следующий код является одним из способов получения результатов, которые вы запрашиваете, используя словарь. Единственная загвоздка в том, что, поскольку словарь не позволяет дублировать ключи, необходимо, чтобы значения словаря были списками (содержащими значения дубликатов ключей).
Обратите внимание, что мне пришлось изменить символ табуляции на |||
, поскольку repl.it не позволяет мне использовать символ табуляции в файлах. Вам придется заменить |||
на \t
в сценарии ниже.
Смотри, беги сюда
import glob
from collections import defaultdict, OrderedDict
d = defaultdict(list)
def read():
for files in glob.glob('*.txt'):
with open(files, 'r') as f:
for line in f:
r = line.rstrip('\n').split('|||')
d[r[2]].append(r)
def display(d):
od = OrderedDict(sorted(d.items(), reverse=True))
for k,v in od.items(): print(k,v)
read()
display(d)
Вывод для приведенного выше сценария приведен ниже:
900 [['file', 'GameOfThrones', '900', '0']]
504 [['file', 'DC/Batman', '504', '1']]
444 [['file', 'Science/Chemistry', '444', '1']]
342 [['file', 'Marvel/CaptainAmerica', '342', '0'], ['file', 'Math/Calculus', '342', '0']]
324 [['file', 'Psychology', '324', '1']]
300 [['file', 'Marvel/GuardiansOfGalaxy', '300', '1']]
234 [['file', 'Anthropology', '234', '0']]
200 [['file', 'DC/Superman', '200', '1'], ['file', 'Science/Biology', '200', '1']]
Различные выходы
Изменение print(k,v)
на другой формат дает вам другой результат, как вы отметили в комментариях ниже. Например:
print(k, [x[1] for x in v])
Это приводит к следующему:
900 ['GameOfThrones']
504 ['DC/Batman']
444 ['Science/Chemistry']
342 ['Marvel/CaptainAmerica', 'Math/Calculus']
324 ['Psychology']
300 ['Marvel/GuardiansOfGalaxy']
234 ['Anthropology']
200 ['DC/Superman', 'Science/Biology']