2010-05-10 12 views
9

Grundsätzlich möchte ich wie { "a":"bar", "b":"blah", "c":"abc", "d":"nada" }Python-Wörterbuch auf variable Zuweisungen auf Grundlage der Schlüsselwert Variablennamen

ein

Wörterbuch nehmen und es verwenden, Variablen zu setzen (in einem Objekt), die den gleichen Namen haben wie ein Schlüssel im Wörterbuch.

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

So in das Ende self.a = "bar", self.b = "bla", etc ... (und Taste "d" wird ignoriert)

Irgendwelche Ideen?

Antwort

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

Ich mag diesen Ansatz etwas besser. Es könnte jedoch erwähnenswert sein, dass iteritems() in 3.x zugunsten von items() entfernt wird. Nicht sicher, welche Version das OP verwendet. – Peter

5

Übersetzung Ihrer class Aussage zu 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]) 

die fromdict Methode scheint die Funktionalität haben Sie anfordern.

2

Eine weitere Option ist Argument auspacken zu verwenden:

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

Kannst du bitte dieses "Argument Entpacken" erklären? – Tengis

+1

@Tengis: 'd = {" a ": 1," b ": 2}; f (** d) 'ist das gleiche wie' f (a = 1, b = 2) ' – Eric

+0

cool und danke! – Tengis

Verwandte Themen