[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