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@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a