基于键值对将Python字典赋值给变量名

9
基本上,我想使用类似于以下的字典:{"a":"bar", "b":"blah", "c":"abc", "d":"nada"},将其用于设置与字典中的键名相同名称的变量(在一个对象中)。
class Foo(object)
{
    self.a = ""
    self.b = ""
    self.c = ""
}

最终结果是self.a="bar",self.b="blah"等(键"d"被忽略)。

有任何想法吗?

3个回答

5

将您的class语句翻译成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])

fromdict 方法似乎具备您所需的功能。


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)

我稍微更喜欢这种方法。但值得注意的是,iteritems()在3.x中被移除,取而代之的是items()。不确定OP正在使用哪个版本。 - Peter

2

另一种选择是使用参数拆包:

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
请问您能解释一下什么是“参数解包”吗? - Tengis
1
@Tengis:d = {"a": 1, "b": 2}; f(**d)f(a=1, b=2)相同。 - Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接