Tutaj odpowiedzą w słowniku, który ma wartości formularza przechowywane w słowniku. Moim wyjściem jest generatd z oddzielnym słownikiem, który nie potrzebuję osobno. Chcę tylko wszystkich elementów tylko w jednym słowniku

resp = {}
b = []
for i in range(1, 10):
    resp_i = form.getvalue('opt_%d' %i, '0')
    resp[i] = int(resp_i)
    arg =  {i : resp[i]}
    b.append(arg)
    #print len(b)
for each in b:
    print each

Rzeczywiste wyjście: {1: 1} {2: 1} {3: 3} {4: 1} {5: 3} {6: 0} {7: 0} {8: 0} {9: 0}

Oczekiwany wyjście: {1: 1, 2: 1, 3: 3, 4: 1, 5: 3, 6: 0, 7: 0, 8: 0, 9: 0}

0
Amy 10 grudzień 2013, 09:36

2 odpowiedzi

Najlepsza odpowiedź

Problem jest tutaj:

b = []
for ...
   arg = {i: resp[i]}  # creates a new dict
   b.append(arg)  # adds the dict to the list

To, czego prawdopodobnie szukasz, jest coś takiego:

b = {}
for ...
    b.update(arg)

Oczywiście to nadal nie jest najczystym sposobem na to. Przecież, dlaczego tworzyć wszystkie tymczasowe słowniki?

b = {}
for ...
   b[i] = resp[i]

Pracowałby lub prawdopodobnie mógłbyś nawet wyciągnąć wszystko do zrozumienia słownika.

2
mgilson 10 grudzień 2013, 05:38
def form_getvalue(i):
    return ('0', '1', '1', '3', '1', '3', '0', '0', '0', '0')[i]

resp = {}
for i in range(1, 10):
    resp[i] = int(form_getvalue(i))

print 'resp=%s' % (resp,)

Wynik powyższego to:

resp={1: 1, 2: 1, 3: 3, 4: 1, 5: 3, 6: 0, 7: 0, 8: 0, 9: 0} 
0
John1024 10 grudzień 2013, 06:38