Как создать этот вложенный словарь Python? - PullRequest
1 голос
/ 23 июля 2011

Это то, что я хочу (предупреждение: 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 ]

2 голосов
/ 23 июля 2011

Это создаст список словарей:

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 голос
/ 23 июля 2011

Я никогда не работал с 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 голосов
/ 23 июля 2011

я думаю, что вы хотите сделать что-то вроде этого:

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

Таким образом, вы будете искать свои формы с их идентификатором (что является обычным способом поиска вещей)

Вы можете сделать это следующим образом:

forms = {}

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

Теперь мне интересно, почему вы хотите сохранить формы в словаре?мне кажется странным.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...