如何遍历字典并将每个键的值分配给另一个对象中的匹配属性?

时间:2013-02-23 18:28:08

标签: google-app-engine python-2.7 google-cloud-datastore

我正在尝试迭代字典和实体。如果dict键与实体属性匹配,我想将键的值赋值为属性的值。

我的型号代码是:

class myModel(db.Model):
    Property1 = db.IntegerProperty()
    Property2 = db.StringProperty(required=True,choices=set(["this", "that", "other"]))
    Property3 = db.StringProperty()

我的命令是:

{u'Property1': u'1234', u'Property2': u'trouble', u'Property3': u'2321'}

我用来遍历这两个对象的代码有效,但它正在跳过模型中的验证。如果我明确指定myModel.Property2 = 'trouble',我会收到BadValueError。但是,在下面的代码中,我没有。

for le_attr, le_value in myModel.__dict__.iteritems():
    for key, value in Data[0].items():
        if ('_' + str(key)) == (str(le_attr)):
            myModel.__dict__[le_attr]= value

我的想法是,无论字典中有多少个键,只会分配与属性匹配的键,而忽略所有其他键。使用上面的代码,这是有效的。

但是有没有办法做到这一点并且还在进行验证?

1 个答案:

答案 0 :(得分:0)

您需要使用dir()setattr() functions而不是戳入__dict__结构:

for le_attr in dir(myModel)
    if le_attr in Data[0]:
        setattr(myModel, le_attr, Data[0][le_attr])