Python 将值从字典分配给对象

Python 将值从字典分配给对象,python,Python,我经常需要做这样的事情: "Some dictionary with values obtained somehow (e.g. submitted form values)" my_dict = { 'name': 'John', 'surname': 'Doe', 'age': 27, 'hair_color': 'green', } "object person is some instance of class representing person"

我经常需要做这样的事情:

"Some dictionary with values obtained somehow (e.g. submitted form values)"
my_dict = {
    'name': 'John',
    'surname': 'Doe',
    'age': 27,
    'hair_color': 'green',
}

"object person is some instance of class representing person"
person.name = my_dict['name']
person.surname = my_dict['surname']
person.age = my_dict['age']
person.hair_color = my_dict['hair_color']
key_list = ['name', 'surname', 'age', 'hair_color']
for attr in key_list:
    setattr(person, attr, my_dict[attr])
我认为这是很多重复。你用什么方法

for attr, val in my_dict.items():
    setattr(person, attr, val)
如果
my_dict
可能包含任何您不想复制到
person
的密钥,请创建一个您确实想复制的密钥列表,并执行以下操作:

"Some dictionary with values obtained somehow (e.g. submitted form values)"
my_dict = {
    'name': 'John',
    'surname': 'Doe',
    'age': 27,
    'hair_color': 'green',
}

"object person is some instance of class representing person"
person.name = my_dict['name']
person.surname = my_dict['surname']
person.age = my_dict['age']
person.hair_color = my_dict['hair_color']
key_list = ['name', 'surname', 'age', 'hair_color']
for attr in key_list:
    setattr(person, attr, my_dict[attr])

由于实例的属性可以通过字典访问,因此请使用
实例

>>> for item in my_dict:
        person.__dict__[item]=my_dict[item]

这方面已经有了一个相当好的Q/a:

就你而言:

person = type('Person', (object,), my_dict)
print person.name

注意:确保过滤/santizie my_dict(限制密钥),否则用户可以更新任意属性。要限制密钥,可以使用显式白名单,例如
key_list
,即使
my_dict
没有未使用的密钥。这将绕过setter属性和
\u setattr