2011-07-23 70 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