1

我有一些簡單的模型我ndb.Model子類的屬性:如何過濾的字典來匹配

class MyModel1(ndb.Model): 
    attribute1 = ndb.StringProperty() 
    attribute2 = ndb.StringProperty() 

class MyModel2(MyModel1): 
    attribute3 = ndb.StringProperty() 
    attribute4 = ndb.StringProperty() 

而且我提供了一個JSON字典到RequestHandler的API:

class APIRequestHandler(webapp2.RequestHandler): 
    def dispatch(self): 
     if len(self.request.body) > 0: 
      self.request.jsondata = json.loads(self.request.body) 
     super(APIRequestHandler, self).dispatch() 

而且我支持把一些具體的子類:

class MyModel1Handler(APIRequestHandler): 

    def put(self, key): 
     mymodel1 = get_model(key) 
     mymodel1.populate(**self.request.jsondata) 
     mymodel1.put() 
#write the response 

class MyModel2Handler(APIRequestHandler): 

    def put(self, key): 
     mymodel2 = get_model(key) 
     mymodel2.populate(**self.request.jsondata) 
     mymodel2.put() 
#write the response 

不過,我想篩選字典self.reque調用時填充st.jsondata移除對象上不屬於任何屬性的任何鍵。有沒有一個簡單的pythonic這樣做?

回答

2

使用列表理解

filter_props = [k for k, v in Model1._properties.iteritems()] 

過濾原始字典由這些屬性名稱使用字典理解

new_dict = {k:v for (k, v) in self.request.jsondata.iteritems() if k in filter_props} 

使用此新字典來填充模型獲取模型的屬性列表

mymodel1.populate(**new_dict) 

這是乾淨的,沒有特殊的NDB功能ionality做到這一點