为了账号安全,请及时绑定邮箱和手机立即绑定

Python 3 中的“类型错误:列表索引必须是整数或切片,而不是 dict”。

Python 3 中的“类型错误:列表索引必须是整数或切片,而不是 dict”。

qq_花开花谢_0 2021-09-11 10:47:02
我正在处理一个项目并收到一个我不知道如何纠正的类型错误。我正在寻求有关我所忽略的内容以及如何纠正此错误的帮助。下面是创建错误的函数。我已经打印了我创建的字典和列表,以便你们都能看到数据是什么。在我看来,列表中的所有索引都是整数,这让我感到困惑。def summarize_points(submissions):    print(submissions[0])    pointsPossible = []    groupWeight = []    userScore = []       for assignment in submissions:        if assignment['workflow_state'] == 'graded':            pointsPossible.append(int(assignment['assignment']             ['points_possible']))            groupWeight.append(int(assignment['assignment']['group']             ['group_weight']))            userScore.append(int(assignment['score']))        pass    pass    print('\n\n\n\nTest Data \n\n\n')    print('pointsPossible')    print(pointsPossible)    print('\ngroupWeight')    print(groupWeight)    print('\nuserScore')    print(userScore)    weightedTotalPoints = []    weightedUserScore = []    for assignment in submissions:        weightedtotalPointsAddition = int(pointsPossible[assignment]) * int(groupWeight[assignment])    weightedTotalPoints.append(weightedtotalPointsAddition)    weightedUserScoreAddition = int(userScore[assignment]) * int(groupWeight[assignment])    weightedUserScore.append(weightedUserScoreAddition)currentGrade = sum(weightedUserScore) / sum(weightedTotalPoints)currentGrade = round(currentGrade)print(weightedtotalPoints)print(weightedUserScore)print(currentGrade)下面是错误File "path", line 97, in summarize_pointsweightedtotalPointsAddition = int(pointsPossible[assignment]) * int(groupWeight[assignment])TypeError: list indices must be integers or slices, not dict
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

问题很明显:您的assignment变量是 a dict,如您print(submissions[0])所示,并且由于pointsPossible是一个列表,您应该输入 aninteger或 aslice以从中调用元素。因此,即使您list的 由 组成integers,当您调用时list[index], 也index应该包含一个integeror slice

检查您的代码,我猜您正在尝试使用points_possibledict 中的值assignment。一件令人困惑的事情是,您从submissionas调用了元素assignment,它与您的 JSON 键之一的名称相同,所以这就是混淆。

为了从您的 json 中调用正确的元素,您应该调用dictName["assignment"]["points_possible"].

当你打电话的for循环,你从调用每个元素submissionsassignment为好。

所以正确的调用是: assignment["assignment"]["points_possible"]

为了达到你想要什么,只是改变int(pointsPossible[assignment])pointPossible[int(assignment["assignment"]["points_possible"])]应该做的伎俩。

如果您想从您的dict, 但assignment在您的 dict 上的键内访问另一个元素,只需更改points_possible为正确的。

PS:如果您遇到其他问题,请告诉我,我会在此处更新代码。


查看完整回答
反对 回复 2021-09-11
  • 1 回答
  • 0 关注
  • 268 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信