Присвойте 0 определенным словам, когда слов нет

Это мой первый пост в stackoverflow, и я полностью посвятил себя программированию. Поэтому, пожалуйста, потерпите меня.

Я работаю над экспериментом, в котором есть два набора документов данных. Doc1 выглядит следующим образом:

TOPIC:topic_0 5892.0
site 0.0371690427699
Internet 0.0261371350984
online 0.0229124236253
web 0.0218940936864
say 0.0159538357094
image 0.015105227427

TOPIC:topic_1 12366.0
Mr 0.150331554262
s 0.0517548115801
say 0.0451237263464

TOPIC:topic_2 ....
.....
.....

TOPIC:topic_3 1066.0
say 0.062
word 0.182

и так до 100 тем.

В этом документе есть слова, которые либо присутствуют во всех темах, либо просто присутствуют в нескольких темах. Итак, я хотел бы выполнить процесс, в котором, если слово не присутствует в одной теме, я хотел бы, чтобы значение слова в этой теме было равно 0. То есть слово BBC присутствует в теме 2, но его нет в тема 1, поэтому я хотел бы иметь свой список как:

TOPIC:topic_0 5892.0
site 0.0371690427699
Internet 0.0261371350984
online 0.0229124236253
web 0.0218940936864
say 0.0159538357094
image 0.015105227427
Mr 0
s 0
president 0
tell 0
BBC 0

TOPIC:topic_1 12366.0
Mr 0.150331554262
s 0.0517548115801
say 0.0451237263464
president 0.0153647096879
tell 0.0135856380398
BBC 0.0135856380398
site 0
Internet 0
online 0
web 0
say 0
image 0

Я должен умножить эти значения с другим набором значений, присутствующих в другом документе. Для этого,

from collections import defaultdict
from itertools import groupby, imap

d = defaultdict(list)
with open("doc1") as f,open("doc2") as f2:
values = map(float, f2.read().split()) 
for line in f:
    if line.strip() and not line.startswith("TOPIC"):
        name, val = line.split()
        d[name].append(float(val))

for k,v in d.items():
     print("Prob for {} is {}".format(k ,sum(i*j for i, j in zip(v,values)) ))

Мой doc2 имеет формат:

  0.566667 0.0333333 0.133333 0 0 0  2.43333 0 0.13333......... till 100 values. 

В приведенном выше коде рассматривается слово «сказать». Он проверяет, что слово состоит из 3 тем, и собирает их значения в списке, например [0,015, 0,45, 0,062]. Этот список умножается на значения в doc2 таким образом, что значение 0.015 умножается на 0-е значение в doc2, 0.45 * 1-е значение в doc2 и 0.062 * 2-е значение в doc2. Но это не то, что я хочу. Мы видим, что в topic_2 нет слова "SAY". Здесь список должен содержать [0,015, 0,45, 0, 0,062]. Таким образом, когда эти значения умножаются на соответствующие значения положения из doc2, они дают

P(SAY) = (0.566667*0.015) + (0.0333333*0.045) + (0.133333 *0) + (0*0.062)

Итак, код в порядке, но требуется только эта модификация.

Ответы на вопрос(3)

Ваш ответ на вопрос