将字典解压缩到模型中

时间:2015-08-17 00:19:35

标签: python python-2.7 flask

使用**解包时,我需要与构造函数具有完全相同的参数?

我的意思是,如果我在字典中有一个额外的项目,应该被忽略,我需要弹出项目?目前我正在尝试解压一切,我希望该项目会立即被排除,但我收到此错误:

  __init__() got an unexpected keyword argument
nagative = NegativeSentimentAnalysis(**negative_items)
class NegativeSentimentAnalysis(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    sentiment = db.Column(db.String(500))
    topic = db.Column(db.String(500))

    def __init__(self, sentiment=None, topic=None):
        self.sentiment = user_id
        self.topic = topic

2 个答案:

答案 0 :(得分:2)

您可以让__init__接受所有关键字参数:

    def __init__(self, sentiment=None, topic=None, **kw):

这将导致在kw中收集剩余的参数,该方法可以忽略。但是,这有一个警告,您可能有其他代码构造此对象可能需要失败。

或者只是过滤掉其他答案中提到的参数。

答案 1 :(得分:0)

您可以使用相关键构造一个新的dict并使用:

keys = {'sentiment', 'topic'}
kwargs = {k:v for k,v in negative_items.iteritems() if k in keys}
negative = NegativeSentimentAnalysis(**kwargs)