[Python] Creazione albero stocastico solo con dizionari

Antonio Piepoli piepoli.antonio a gmail.com
Lun 17 Set 2012 18:21:15 CEST


def choose(p):
    r = random.random()
    index = 0
    while (r > 0):
      r -= probs[index]
      index += 1
    return index-1

def error(): print "1_error"
def error2(): print "2_error"
def noerror(): print "no_error"

if __name__ == '__main__':

    match = (((error,error2,noerror),(0.5,0.2,0.3)), #name
        ((error,error2,noerror),(0.5,0.2,0.3)), #surname
        ((error,error2,noerror),(0,0,1))) #sex

    for step,probs in match:
        step[choose(probs)]()

ho risolto così... ho attutito con un cuscino o sono salito di un altro
piano ? :D

Il giorno 17 settembre 2012 17:31, Daniele Varrazzo <piro a develer.com> ha
scritto:

> On 2012-09-17 16:00, Antonio Piepoli wrote:
>
>  Sì avevo già intenzione di usare le funzioni come oggetto come mi hai
>> detto
>> tu. Quello che non riesco a fare è fare la stessa cosa per i dizionari;
>> cioè match[0] è "match_surname" (una stringa), voglio che lo script prenda
>> il dizionario che ha lo stesso nome della stringa... che scelga la
>> funzione
>> e che la applichi... per poi passare al passo successivo di match ->
>> match[1] etc ... spero di essermi spiegato meglio.
>>
>
> Sì. Ma perchè non metti il (riferimento al) dizionario nella lista e
> peschi direttamente quello?
>
>     match_surname = {}
>     match_name = {}
>     match = [match_surname, match_name]
>
> quello che vuoi fare tu, prendere un oggetto globale tramite il nome, si
> fa facile: globals()['match_name'], per cui tu dovresti fare
> globals()[match[1]]. Ma è strano ti serva: di sicuro fare una lista o usare
> altre strutture con i riferimenti espliciti ai dizionari è una soluzione
> migliore che andarseli a cercare per nome.
>
>
>
>  ho corretto l'errore in choose:
>>
>> def choose(d):
>>     index = 0
>>     keys = d.keys()
>>     r = random.random()
>>     while (r > 0):
>>           r -= d[keys[index]]
>>         index += 1
>>     return keys[index-1]
>>
>
> Sempre brutta come una caduta per le scale resta :) Per esempio, poiché
> metti la cosa che scegli nelle chiavi di un dizionario, allora deve essere
> hashabile, per cui non puoi scegliere casualmente da un insieme di liste o
> di dizionari. Per non parlare della sua efficienza. Comunque sei libero di
> usare questa se ti soddisfa in correttezza, prestazioni e possiblità di
> input.
>
>
>
> --
> Daniele Varrazzo - Develer S.r.l.
> http://www.develer.com
> ______________________________**_________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/**mailman/listinfo/python<http://lists.python.it/mailman/listinfo/python>
>



-- 
Antonio Piepoli
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20120917/161df47c/attachment.html>


Maggiori informazioni sulla lista Python