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

Bur*_*ing 8 python django dictionary python-2.7 django-rest-framework

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

这是请求数据:

<QueryDict: {u'is_public': [u'True']}>
Run Code Online (Sandbox Code Playgroud)

这是来自类的清理数据:

{'name': u'', 'devie_type': u'', 'is_public': True, 'serial_num': u'', 'is_online': False, 'operation_system': u''}
Run Code Online (Sandbox Code Playgroud)

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

{u'is_public': True}
Run Code Online (Sandbox Code Playgroud)

这是我的尝试:

a = {}
for k in request.data:
    if k in the_form.cleaned_data:
        a[k] = the_form.cleaned_data[k]
print a
Run Code Online (Sandbox Code Playgroud)

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

Sha*_*ger 5

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

a = {k: the_form.cleaned_data[k]
     for k in request.data.viewkeys() & the_form.cleaned_data.viewkeys()}
Run Code Online (Sandbox Code Playgroud)

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