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

我正在处理一个项目并收到一个我不知道如何纠正的类型错误。我正在寻求有关我所忽略的内容以及如何纠正此错误的帮助。


下面是创建错误的函数。我已经打印了我创建的字典和列表,以便你们都能看到数据是什么。在我看来,列表中的所有索引都是整数,这让我感到困惑。


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_points

weightedtotalPointsAddition = int(pointsPossible[assignment]) * 

int(groupWeight[assignment])


TypeError: list indices must be integers or slices, not dict


qq_花开花谢_0
浏览 274回答 1
1回答

临摹微笑

问题很明显:您的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循环,你从调用每个元素submissions的assignment为好。所以正确的调用是: assignment["assignment"]["points_possible"]为了达到你想要什么,只是改变int(pointsPossible[assignment])了pointPossible[int(assignment["assignment"]["points_possible"])]应该做的伎俩。如果您想从您的dict, 但assignment在您的 dict 上的键内访问另一个元素,只需更改points_possible为正确的。PS:如果您遇到其他问题,请告诉我,我会在此处更新代码。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python