如何在不触发“ IndexError:标量变量的无效索引”的情况下进行索引。错误

时间:2019-05-05 20:25:31

标签: python list dictionary

我试图在字典中找到最大值,而我的方法是遍历并检查最大值,并列出最大值/关键字对以及字典中与之等效的所有内容,我有以下...

def foo(class_sum, input_object):  # Predicts the class x is a member of given probability dictionary
    probabilities = calc_class_probs(class_sum, input_object)  # Returns a dictionary with probability elements
    best_label, best_perc = list(), list()
    best_perc.append(-1)
    print(best_perc[0])
    for val in probabilities:
        print(probabilities[val])
        if probabilities[val] > best_perc[0]:
            del best_label
            del best_perc  # Empty list in case unwanted elements are present
            best_label, best_perc = val, probabilities[val]  # update with new best
        elif probabilities[val] == best_perc:
            best_label.append(val)
            best_perc.append(probabilities[val])

    return best_label, best_perc

因此,我希望至少在第一次迭代中,if probabilities[val] > best_perc[0]:的评估结果为7.591391076586993e-36 > -1。但是我从打印语句中得到以下输出...

-1
7.591391076586993e-36

编辑:它似乎在第二次迭代中失败,这可能是由于del语句造成的吗?

0 7.591391076586993e-36
1 7.297754873023128e-36
...
IndexError: invalid index to scalar variable.

和这个错误...

if probabilities[val] > best_perc[0]:
IndexError: invalid index to scalar variable.

为什么它可以打印值而不在这里索引它们?请注意probabilities是一本字典,其键具有如下所示的单个概率值。

{'0': 7.59139e-36, '1': 7.2977e-36,...}

1 个答案:

答案 0 :(得分:2)

我相信您的问题在这里:

best_label, best_perc = val, probabilities[val]

在执行第一个'if'best_lavel并且best_perc不再列出之后,因此您无法访问best_perc[0]

您可以用

替换
best_label, best_perc = [val], [probabilities[val]]

注意,当您在字典中进行迭代时,您将遍历键而不是值。 您可以按键和值进行迭代:

for key, val in dictionary.items():