Я знаю, что мой код не очень красивый и не совсем то, что вы хотите, но это решение. Я бы предпочел использовать словарь вместо структуры списка, такой как ['file1',2,'file2,'4']
Давайте определим 2 файла в качестве примера:
file1.txt:
this is an example
file2.txt:
this is an example
but multi line example
Вот решение:
from collections import Counter
filenames = ["file1.txt", "file2.txt"]
# First, find word frequencies in files
file_dict = {}
for filename in filenames:
with open(filename) as f:
text = f.read()
words = text.split()
cnt = Counter()
for word in words:
cnt[word] += 1
file_dict[filename] = dict(cnt)
print("file_dict: ", file_dict)
#Then, calculate frequencies in files for each word
word_dict = {}
for filename, words in file_dict.items():
for word, count in words.items():
if word not in word_dict.keys():
word_dict[word] = {filename: count}
else:
if filename not in word_dict[word].keys():
word_dict[word][filename] = count
else:
word_dict[word][filename] += count
print("word_dict: ", word_dict)
Выход:
file_dict: {'file1.txt': {'this': 1, 'is': 1, 'an': 1, 'example': 1}, 'file2.txt': {'this': 1, 'is': 1, 'an': 1, 'example': 2, 'but': 1, 'multi': 1, 'line': 1}}
word_dict: {'this': {'file1.txt': 1, 'file2.txt': 1}, 'is': {'file1.txt': 1, 'file2.txt': 1}, 'an': {'file1.txt': 1, 'file2.txt': 1}, 'example': {'file1.txt': 1, 'file2.txt': 2}, 'but': {'file2.txt': 1}, 'multi': {'file2.txt': 1}, 'line': {'file2.txt': 1}}