【问题标题】:Flask - Why can I return a list, but not a dict? [duplicate]Flask - 为什么我可以返回一个列表,而不是一个字典? [复制]
【发布时间】:2019-05-20 09:05:56
【问题描述】:

假设我有一个基本的烧瓶程序......

lis = [1, 2, 3, 4]
dict1 = defaultdict(list)
dict1["key"].append("Hello")

@app.route("/list/<string:index>")
def l(index):
    return lis[index]

@app.route("/dictionary/<string:key>")
def d(key):
    return dict1[key]

为什么第一个有效,第二个无效?

如何返回字典中的所有项目?

【问题讨论】:

  • 您实际上是在传递变量key 吗?因为dict["key"]dict[key] 不一样。如果您在调试模式下运行,您的错误消息也应该有所帮助。编辑:啊,我现在看到你的更新了。好的。

标签: python flask


【解决方案1】:

问题是烧瓶在响应中期望一个简单的字符串或可调用对象,因为它需要传递值。字典不是可调用对象,您必须将其转换为可以使用 json.dumps 并设置适当的 Content-type 标头(在本例中为 'application/json')或仅使用 jsonify 传递的表单为你的辛勤工作。 Jsonify Docs

import flask
from flask import request, jsonify #import jsonify
from collections import defaultdict
app = flask.Flask(__name__)
app.config["DEBUG"] = True


lis = [1, 2, 3, 4]
dict1 = defaultdict(list)
dict1.setdefault("key", []).append("Hello") #you do not need to setdefault if you're already using a defaultdict, but this does not raise any errors.
dict2 = {"a":"res"}

@app.route("/list/<string:index>")
def l(index):
    return lis[index]

@app.route("/dictionary/<string:key>")
def d(key):
    return jsonify(dict1[key]) #use it to handle dictionary

app.run()

【讨论】:

    【解决方案2】:

    不要将变量命名为listdict,因为它们会影响内置函数。试试下面的代码。链接到docs

    lis = [1, 2, 3, 4]
    dict1 = defaultdict(list)
    dict1['key'].append("Hello")
    

    如果要获取dict1的所有项目

    dict1.items()
    

    它很好地解释了 defaultdict 的工作原理 How does collections.defaultdict work?

    【讨论】:

    • 我编辑了我的示例以更准确地反映我的程序
    • 您仍然以错误的方式使用。检查随附的文档。谢谢
    • 我仍然收到错误:“TypeError: 'dict_items' object is not callable”
    • 另外,我不想获取 dict1 的所有项目,只想获取与传入的键关联的所有值。我不应该只能够使用:dict1['键']?
    • 您的问题和代码是切线的。是的,您应该从 dict1['key'] 获取值,但是您只有一个 str 对象 'hello' 映射到键,因此应该返回。
    猜你喜欢
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2020-06-27
    • 2012-12-02
    • 1970-01-01
    相关资源
    最近更新 更多