基于键值到变量名的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)