【问题标题】:python list of dictionariespython 字典列表
【发布时间】:2011-05-30 19:13:31
【问题描述】:

我有一个简单的代码来使用 sqlalchemy 从 db 中获取用户并将它们作为 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

谢谢。

【问题讨论】:

  • 你在哪一行得到这个错误?
  • 你能粘贴整个堆栈跟踪吗?
  • 不是你报错的原因,但是如果你想拥有那个数据结构,你需要将返回行改为:return jsonify( {"results": d} )
  • 完整堆栈跟踪位于:paste.pocoo.org/show/397870 完整代码位于:paste.pocoo.org/show/397871
  • 另外,您使用的属性应该是私有的 (__table__),有 other ways 使用 API 和一些帮助程序来获取该元数据。

标签: python list dictionary


【解决方案1】:

我只是说解决了这个错误

return jsonify( results = d )

而不是

return jsonify( d )

【讨论】:

  • 不错。这背后的原因是烧瓶中的 jsonify 不会在顶层编码原始数组(在方括号中)。我不知道具体原因,但这被认为是不安全的。
【解决方案2】:

啊,既然你的代码已经粘贴了,我可以看出根本问题确实来自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 constructor 的参数相同——即一个字典或一个元组的迭代。所以这就是问题所在。

【讨论】:

【解决方案3】:

您使用*args 调用dict(),这会将args 扩展为位置参数。这是您看到的错误的典型原因。别管它。

【讨论】:

  • 他在某个地方,或者正在使用他提供的一些参数被调用。
【解决方案4】:

错误是您在错误地创建字典时所期望的 - 请参阅 Python dictionary creation error

已编辑:查看 senderle 的答案,确定根本原因...

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 2015-07-23
    相关资源
    最近更新 更多