Distribuindo números inteiros usando pesos? Como calcular

Preciso distribuir um valor com base em alguns pesos. Por exemplo, se meus pesos forem 1 e 2, seria de esperar que a coluna ponderada como 2 tivesse o dobro do valor da coluna ponderada 1.

Tenho algum código Python para demonstrar o que estou tentando fazer e o problema:

def distribute(total, distribution):
    distributed_total = []
    for weight in distribution:
        weight = float(weight)
        p = weight/sum(distribution)
        weighted_value = round(p*total)
        distributed_total.append(weighted_value)
    return distributed_total

for x in xrange(100):
    d = distribute(x, (1,2,3))
    if x != sum(d):
        print x, sum(d), d

Há muitos casos mostrados pelo código acima, em que a distribuição de um valor resulta na soma da distribuição diferente do valor original. Por exemplo, distribuir 3 com pesos de (1,2,3) resulta em (1,1,2), totalizando 4.

Qual é a maneira mais simples de corrigir esse algoritmo de distribuição?

ATUALIZAR

Espero que os valores distribuídos sejam valores inteiros. Não importa exatamente como os números inteiros são distribuídos desde que cheguem ao valor correto e estejam "o mais próximo possível" da distribuição correta.

(Por distribuição correta, quero dizer a distribuição não inteira, e ainda não defini completamente o que quero dizer com "o mais próximo possível". Existem talvez várias saídas válidas, desde que totalizem o valor original.)