【问题标题】:Syntax for nested dictionaries in PythonPython中嵌套字典的语法
【发布时间】:2021-06-29 21:22:50
【问题描述】:

我正在使用 CanvasAPI 开发用于自动评分作业的 Python 脚本,CanvasAPI 是用于 Canvas 学习管理平台的 Python 中的 API 包装器。在研究文档的过程中,我可以成功地在 Python 中针对一些参数发出 curl 命令。例如,下面的这种转换是为单个提交上传评分量规信息:

Curl command per the Canvas API docs:

PUT /api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id

与:

rubric_assessment[criterion_id][points]

Turns into this via the CanvasAPI Python wrapper

edit(rubric_assessment={'criterion_#':{'points': 'point #'}})

但是,我在添加其他参数的语法上遇到了困难,这会创建看似嵌套的字典。例如,如果我想添加文本注释和成绩,API 文档提供了以下内容:

rubric_assessment[criterion_id][comments]

我尝试过的:

edit(rubric_assessment={'criterion_#':{'points': 'point #'}, {'criterion_#':{'comments': 'comment_text'}}})

会产生语法错误:

SyntaxError: positional argument follows keyword argument

我也尝试过:

edit(rubric_assessment={'criterion_#':{'points': 'point #'},{'comments': 'comment_text'}})

产生此错误:

SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

构建传递两个参数的语法的正确方法是什么?非常感谢您提供的任何见解和帮助。

【问题讨论】:

  • 您正在尝试将字典用作字典键,但没有关联值。你想要{a:b, c:d}{a:{b:c, c:d}, e:{f:g}} 之类的东西。但是你有{a:{b:c},{d:e}}。最后一种情况是无效的,原因有两个:(1) 它试图使用{d:e} 作为键,(2) 没有与键关联的值。相反,您需要{a:{b:c},d:{e:f}}{a:{b:c,d:e}} 之类的东西。请记住不要将字典用作键(在您的情况下,您的键是字符串),并且始终使用: value 跟随您的键,其中value 可能是也可能不是字典。

标签: python api syntax canvas-lms


【解决方案1】:

来自 rubric_assessment[criterion_id][cmets],看起来你需要,edit(rubric_assessment={'criterion_#':{'points': 'point #','comments':'comment_text'}})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2016-01-08
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多