如何获得“a”和“b”字典的联合键以及' a'值?

时间:2015-10-28 02:57:14

标签: python django python-2.7 dictionary django-rest-framework

我正在做关于处理request.datafrom.cleaned_data问题的django项目。当用户仅输入指定字段时,它将向我的服务器发送请求。接下来,表单类处理请求,但处理输入字段除外,并且不从表单内置字段返回输入字段。

这是请求数据:

<QueryDict: {u'is_public': [u'True']}>

这是来自班级的清理数据:

{'name': u'', 'devie_type': u'', 'is_public': True, 'serial_num': u'', 'is_online': False, 'operation_system': u''}

我知道这些是字典类型。我希望得到他们的联合密钥和清理数据的值。我希望它能回归:

{u'is_public': True}

这是我的尝试:

a = {}
for k in request.data:
    if k in the_form.cleaned_data:
        a[k] = the_form.cleaned_data[k]
print a

可读吗?或者是否有任何关于在python中处理联合字典的内置函数?

3 个答案:

答案 0 :(得分:3)

你可以使用交集操作(这听起来像你真正想要的,而不是联合)来有效地将迭代限制为dict共有的密钥,然后使用字典理解来相当有效地实现这一点:

a = {k: the_form.cleaned_data[k]
     for k in request.data.viewkeys() & the_form.cleaned_data.viewkeys()}

因此,当请求和已清理数据中都存在密钥时,您将拥有从该密钥到已清理数据的映射。仅出现在一个输入dict或另一个输入中的所有其他键都将被删除。在Python 3中,您只需用.viewkeys()替换.keys()(这在Python 2.7之前不起作用,这是引入.viewkeys()的地方)。

答案 1 :(得分:1)

你正在做的事情本身没有任何错误,一切都很好。但是,更加pythonic的方法是使用字典理解:

a = {
   k: the_form.cleaned_data[k]
   for k in request.data
   if k in the_form.cleaned_data
}

答案 2 :(得分:0)

只需:request_data.update(form.cleaned_data)