Atribua 0 a determinadas palavras quando as palavras não estiverem presentes

Este é o meu primeiro post sobre stackoverflow e estou totalmente mais atualizado com a codificação. Por favor tenha paciencia comigo.

Estou trabalhando em um experimento que possui dois conjuntos de documentos de dados. Doc1 é o seguinte:

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

e assim por diante até 100 tópicos.

Neste documento, há palavras que estão presentes em todos os tópicos ou apenas presentes em alguns tópicos. Então, eu gostaria de executar um processo em que, se uma palavra não estiver presente em um tópico, gostaria de ter o valor da palavra nesse tópico como 0. Essa é a palavra BBC presente no tópico 2, mas não existe em tópico 1, gostaria de ter minha lista como:

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

Eu tenho que multiplicar esses valores com outro conjunto de valores presentes em outro documento. Por isso,

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)) ))

Meu doc2 tem o formato:

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

O código acima considera a palavra "dizer". Ele verifica se a palavra está em três tópicos e reúne seus valores em uma lista como [0,015, 0,45, 0,062]. Esta lista é multiplicada dos valores no doc2 de forma que o valor 0,015 seja multiplicado pelo 0o valor no doc2, 0,45 * 1º valor no doc2 e 0,062 * 2º valor no doc2. Mas não é isso que eu quero. Podemos ver que não há palavra "DIGA" no tópico_2. Aqui a lista deve conter [0,015, 0,45, 0, 0,062]. Portanto, quando esses valores são multiplicados pelos respectivos valores de posição do doc2, eles dariam

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

Portanto, o código está perfeitamente correto, mas apenas essa modificação é necessária.

questionAnswers(3)

yourAnswerToTheQuestion