按值添加到词典(和生成键)

时间:2016-12-30 10:33:37

标签: python python-2.7 variables dictionary

在Django中,您经常需要在字典中添加许多变量(视图中的上下文)。这些变量的名称通常很大,很清楚它是什么。

示例:

userprofile_creation_form = UserProfileCreationForm()

当你有很多这样的变量时,为它们写密钥会很不舒服,因为密钥通常与变量名相同。

context['userprofile_creation_form'] = userprofile_creation_form
... imagine 6 other variables
... 
...

所以我希望能够使用这个变量将变量放入字典中,并且名称将从它的名称生成。

像:

context.add(userprofile_creation_form)

>>> context 
>>> {'userprofile_creation_form':<Form userprofile_creation_form>, ... }

是否可以在python中以某种方式执行此操作,或者是否存在可以提供此行为的某些模块或解决方法?

1 个答案:

答案 0 :(得分:0)

在以下示例中,form.__class__.__name__给出了表单类的名称:

for form in my_forms:
    k = ''.join('_{}'.format(c.lower()) if c.isupper() else c for c in form.__class__.__name__).lstrip('_')
    context[k] = form

示例:

>>> class MyForm1:
...     pass
...
>>> class MyForm2:
...     pass
...
>>>
>>> my_forms = [MyForm1(), MyForm2()]
>>>
>>> context = {}
>>>
>>> for form in my_forms:
...     k = ''.join('_{}'.format(c.lower()) if c.isupper() else c for c in form.__class__.__name__).lstrip('_')
...     context[k] = form
...
>>> context
{'my_form1': <__main__.MyForm1 instance at 0x0000000002653188>, 'my_form2': <__main__.MyForm2 instance at 0x0000000002653548>}
>>>

如果您想使用确切名称将表单添加到context,请使用:

>>> for form in my_forms:
...     context[form.__class__.__name__] = form
...
>>> context
{'MyForm2': <__main__.MyForm2 instance at 0x0000000002713548>, 'MyForm1': <__main__.MyForm1 instance at 0x0000000002713188>}