基于键值到变量名的Python字典到变量赋值

基于键值到变量名的Python字典到变量赋值,python,variables,dictionary,variable-assignment,Python,Variables,Dictionary,Variable Assignment,基本上,我想拍一张照片 类似字典的{“a”:“bar”,“b”:“blah”,“c”:“abc”,“d”:“nada”} 并使用它设置与字典中的键同名的变量(在对象中) class Foo(object) { self.a = "" self.b = "" self.c = "" } 所以最后self.a=“bar”,self.b=“blah”等等。。。(忽略键“d”) 有什么想法吗?将您的类语句翻译成Python class Foo(object): a, b

基本上,我想拍一张照片

类似字典的
{“a”:“bar”,“b”:“blah”,“c”:“abc”,“d”:“nada”}

并使用它设置与字典中的键同名的变量(在对象中)

class Foo(object)
{
    self.a = ""
    self.b = ""
    self.c = ""
}
所以最后self.a=“bar”,self.b=“blah”等等。。。(忽略键“d”)


有什么想法吗?

将您的
语句翻译成Python

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)
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])

fromdict
方法似乎具有您请求的功能。

另一个选项是使用参数解包:

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)

我更喜欢这种方法。可能值得注意的是,iteritems()在3.x中被删除,取而代之的是items()。不知道OP使用的是什么版本。你能解释一下这个“参数解包”吗?@Tengis:
d={“a”:1,“b”:2};f(**d)
与f(a=1,b=2)