如何创建这个嵌套的python字典?

时间:2011-07-23 08:49:00

标签: python django

这就是我想要的(警告:Python noob在这里,这可能是一种不正确的代表方式,但我希望你得到我想要的东西)

forms = { 
            { 'id' : '1',
              'form' : form_something,
            },
            { 'id'  : '4',
              'form' : form_something2,
            }
        }  

现在我的问题是我如何在我的django视图中创建这个字典,就像这样,到目前为止 - >

links = Links.objects.all()
forms = {}

for link in links:
    form = LinkForm(instance = link )
    forms.update({ 'id' : link.id, 'form' : form})
    # which is obviously the wrong way to do it

3 个答案:

答案 0 :(得分:2)

这将创建一个词典列表:

links = Links.objects.all()
forms = []
for link in links:
    form = LinkForm(instance = link)
    forms.append({'id': link.id, 'form': form})

如果要创建字典字典,则必须有密钥:

links = Links.objects.all()
forms = {}
for link in links:
    form = LinkForm(instance = link)
    # you need something to use as a key
    forms[key] = {'id': link.id, 'form': form}

请注意,我更改了代码中的空格以匹配标准Python方式,但这并不重要。

嵌套字典的形式为:

forms = { 
       'key1': { 'id' : '1',
          'form' : form_something,
        },
       'key2': { 'id'  : '4',
          'form' : form_something2
        }
    }  

我在form_something2之后添加了密钥并删除了逗号。

答案 1 :(得分:1)

我从未使用过django,但在纯python中,它会像(你想要一个表单列表/元组,而不是表单字典):

links = Links.objects.all()
forms = []
for link in links:
  form = LinkForm(instance = link)
  # the comma tells python to treat the contents inside the ( ) as a list
  forms.append({ 'id' : link.id, 'form' : form })


修改

根据评论中的讨论,与性能方面的元组相比,列表是更好的选择。编辑上面的代码以反映这一变化。

答案 2 :(得分:0)

我认为你想做的事情是这样的:

forms = { '1': form_something,
      '4':form_something2,
     }

通过这种方式,您可以查找带有ID的表单(这是查找内容的常用方法)

你可以这样做:

forms = {}

for link in Links.objects.all():
    form = LinkForm(instance = link )
    forms[form.id] = form`

现在我很好奇为什么要在字典中保存表单?对我来说似乎很奇怪。

希望这有帮助