我正在做关于处理request.data
和from.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中处理联合字典的内置函数?
答案 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)