[Python] Creazione albero stocastico solo con dizionari

Daniele Varrazzo piro a develer.com
Lun 17 Set 2012 17:31:23 CEST


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


Maggiori informazioni sulla lista Python