Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建这个嵌套的python字典?_Python_Django - Fatal编程技术网

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

如何创建这个嵌套的python字典?,python,django,Python,Django,这就是我想要的(警告:这里的Python noob,这可能是一种不正确的表示方式,但我希望您得到我想要的) 现在我的问题是如何在django视图中创建这本词典,目前为止是这样-> links = Links.objects.all() forms = {} for link in links: form = LinkForm(instance = link ) forms.update({ 'id' : link.id, 'form' : form}) # which

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

现在我的问题是如何在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

这将创建字典列表:

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\u something2

之后添加了键并删除了逗号,我从未使用过django,但在纯python中,它会是这样的(您需要表单列表/元组,而不是表单字典):


编辑:


根据评论中的讨论,就性能而言,与元组相比,列表是更好的选择。编辑上面的代码以反映此更改。

我认为您要做的是这样的:

forms = { '1': form_something,
      '4':form_something2,
     }
通过这种方式,您将查找带有id的表单(这是查找内容的常见方式)

您可以这样做:

forms = {}

for link in Links.objects.all():
    form = LinkForm(instance = link )
    forms[form.id] = form`
现在我很好奇你为什么要把表格保存在字典里?我觉得很奇怪


希望这有帮助,问题是我必须在django模板中使用此词典,不确定django模板是否呈现列表此代码根本不起作用。。。元组是不可变的,因此不能添加到它,空元组的语法是
tuple()
而不是
()
。另外,只有当您有多个项目时才使用
+=
它,它相当于
扩展
。如果您有一个项目,请使用
append
。我已经测试了代码,它肯定在Python2.6上运行。我不确定它在Django中是否有什么不同,但我会在下次用python编写代码时记住您的指针:)如果每次都执行
id(forms)
,您将看到您没有添加到它,而是每次都使用一个新项进行复制。有了一个列表,你可以直接添加到同一个列表中。关于
()
,我错了——我完全忘记了这是有效的。Django模板需要对象字典来呈现。您的
表单
不是有效的python字典。它是由两个字典组成的集合,您不能这样做,因为字典是不可散列的。
forms = { '1': form_something,
      '4':form_something2,
     }
forms = {}

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