[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