список словарей python - PullRequest
8 голосов
/ 30 мая 2011

У меня есть простой код для извлечения пользователей из БД с использованием sqlalchemy и возврата их как json. Моя проблема в том, как отформатировать вывод, чтобы получить что-то вроде этого:

{"results": [{"id":1, "username":"john"},{"id":2,"username":"doe"}]}

мой код выдает ошибку, которую я не могу исправить, будучи новичком в python:

d = []

for user in Users.query.all():
    v = {}
    for columnName in Users.__table__.columns.keys():
        v[columnName] = getattr( user, columnName )

    d.append( v )

return jsonify( d )

Код говорит:

ValueError: dictionary update sequence element #0 has length 11; 2 is required

Спасибо.

Ответы [ 4 ]

10 голосов
/ 19 апреля 2013

Я решил эту ошибку, просто сказав

return jsonify( results = d )

вместо

return jsonify( d )
7 голосов
/ 30 мая 2011

Ах, теперь, когда ваш код вставлен, я вижу, что фундаментальная проблема действительно исходит от jsonify. Приведенный ниже обходной путь должен быть удовлетворительным.

>>> import json
>>> json.dumps({"results": [{"id":1, "username":"john"},{"id":2,"username":"doe"}]})
'{"results": [{"username": "john", "id": 1}, {"username": "doe", "id": 2}]}'

Замените jsonify на json.dumps и дайте мне знать, если это не решит проблему.

Но если вы предпочитаете использовать flask.jsonify, вам следует взглянуть на документацию flask. Аргумент jsonify должен быть таким же, как аргумент любого конструктора dict - то есть dict или итерируемый из кортежей. Вот в чем проблема.

0 голосов
/ 30 мая 2011

Вы звоните dict() с *args, что приведет к расширению аргументов до позиционных параметров. Это типичная причина той ошибки, которую вы видите. Оставь это.

0 голосов
/ 30 мая 2011

Ошибка - это то, что вы ожидаете при неправильном создании dict - см. Ошибка создания словаря Python

Отредактировано: см. Ответ от senderle, который определяет основную причину ...

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