2016-02-18 2 views
1

У меня есть список словарей, в результате Джанго formset ошибки:Python не может сделать словарь из списка словарей

[{}, {"field": ["This field is required."]}, {"field": ["This field is required."]}] 

Я хочу сделать словарь, где ключом является индексом словаря + имени поля и значения является сообщение об ошибке:

err = formset.errors 
for dict in err: 
    for error in dict: 
     results[str(err.index(dict))+'-'+error] = dict[error] 

Проблема в том, что я получаю только одно значение от ошибки, не все. Как я могу это решить? Спасибо

+2

В качестве уведомления не используйте 'dict' в качестве имени переменной. – Arman

+0

Что вы подразумеваете под индексом + имя поля? должно быть '1field'? – Arman

+3

Просьба показать желаемый результат и то, что вы получаете вместо этого. –

ответ

2

Вы были довольно близки. Сначала я бы использовал перечисление, потому что это то, что он хотел сделать. И использовать iteritems (Python 2.7) перебрать Dict .:

for idx, _dict in enumerate(err): 
    for error_key, error_value in _dict.iteritems(): 
     results[str(idx)+'-' + error_key] = error_value 

print results 

и я получил:

{'1-field': ['This field is required.'], '2-field': ['This field is required.']}

* Как уже упоминалось в комментариях - Не используйте dict, поскольку он сохранил слово на питона ,

0
err = formset.errors 
D = {} 
for i in len(err): 
    crr_field = err[i].keys()[0] 
    error_msg = "{field} error: {error}".format(field=crr_field,error=err[i][crr_field]) 
    D[i] = error_msg 

D будет {1:"Field field1 error: field is required",2:....}

0

Попробуйте это

results = {} 
err = formset.errors 
for i, my_dict in enumerate(err): 
    for key, value in my_dict.items(): 
     results[str(i)+'-'+key] = value 

items() работы в Python3, потому что iteritems() был удален.

Смежные вопросы