2010-05-10 2 views
9

Fondamentalmente, voglio prendere un dizionariodizionario Python per le assegnazioni delle variabili in base al valore chiave per il nome della variabile

come { "a":"bar", "b":"blah", "c":"abc", "d":"nada" }

e utilizzarlo per impostare le variabili (in un oggetto) che hanno lo stesso nome una chiave nel dizionario.

class Foo(object) 
{ 
    self.a = "" 
    self.b = "" 
    self.c = "" 
} 

Così, alla fine self.a = "bar", self.b = "blah", ecc ... (e il tasto "d" viene ignorato)

Tutte le idee?

risposta

3
class Foo(object): 
    a, b, c = "", "", "" 

foo = Foo() 

_dict = { "a":"bar", "b":"blah", "c":"abc", "d":"nada" } 
for k,v in _dict.iteritems(): 
    if hasattr(foo, k): 
     setattr(foo, k, v) 
+0

Mi piace questo approccio un po 'meglio. Potrebbe essere utile notare che iteritems() viene rimosso in 3.x in favore di items(). Non sei sicuro di quale versione sta utilizzando l'OP. – Peter

5

Traducendo la sua dichiarazione class a Python,

class Foo(object): 
    def __init__(self): 
    self.a = self.b = self.c = '' 
    def fromdict(self, d): 
    for k in d: 
     if hasattr(self, k): 
     setattr(self, k, d[k]) 

il metodo fromdict sembra avere la funzionalità di richiedere.

2

Un'altra opzione è quella di utilizzare l'argomento disimballaggio:

class Foo(object): 
    def __init__(self, a='', b='', c='', **kwargs) 
     self.a = a 
     self.b = b 
     self.c = c 

d = { "a":"bar", "b":"blah", "c":"abc", "d":"nada" } 

f = Foo(**d) 
+1

Puoi spiegare questo "argomento decompressione"? – Tengis

+1

@Tengis: 'd = {" a ": 1," b ": 2}; f (** d) 'è uguale a' f (a = 1, b = 2) ' – Eric

+0

cool e grazie! – Tengis