2011-07-23 25 views
1

这是什么,我想做(警告:这里的Python菜鸟,这可能是较不正确的方式,但我希望你能得到我想要的)如何创建这个嵌套的Python字典?

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 
+0

你'forms'不是一个有效的Python字典。它是一套两个字典,你不能这样做,因为字典是不可散列的。 –

回答

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后除去逗号。

+0

非常感谢! –

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 }) 


编辑:

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

+0

事情是我必须在django模板中使用这个字典,不知道如果Django模板呈现列表 –

+0

这个代码根本不起作用...一个元组是不可变的,所以你不能添加它,一个空元组的语法是'tuple()'而不是'()'。另外,只有在有多个项目时才使用'+ =',这相当于'extend'。如果你有一个项目,使用'append'。 – agf

+0

我测试过代码,它肯定运行在python 2.6上。不知道它是否与django –

0

我想你想做的事是这样的:

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

这样,你将寻找其ID的形式(也就是找东西的常用方法)

可以这样做:

forms = {} 

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

现在我很好奇你为什么要保存在字典中的形式?对我来说似乎很奇怪。

希望这有助于

+0

Django模板需要渲染对象的字典。 – agf

+0

wops!这是真正的哈哈 – Hassek