变量放置在不同位置时的 AttributeError(列表理解)

AttributeError when variable placed in different spot (list comprehension)

当 HD 放置在 return 语句之前的任何位置时,以下代码工作正常。当 HD 放在 D 和 return 语句之间时,它会给出一个 AttributeErrror。 N 变量也是如此——如果我将它放在底部,它就不起作用。我敢肯定对此有一个很好的解释,如果有人有空,我很想了解一下。

有效

def marksdistribution(D):
    N = [s for s in D.values() if s < 50]
    HD = [s for s in D.values() if s > 80]
    P = [s for s in D.values() if s >= 50 and s < 60]
    Cr = [s for s in D.values() if s >= 60 and s < 70]
    D = [s for s in D.values() if s >= 70 and s < 80]
    return HD

print(marksdistribution({"Fred":55, "James":90, "Jemima":71}))

不起作用

def marksdistribution(D):
    N = [s for s in D.values() if s < 50]
    P = [s for s in D.values() if s >= 50 and s < 60]
    Cr = [s for s in D.values() if s >= 60 and s < 70]
    D = [s for s in D.values() if s >= 70 and s < 80]
    HD = [s for s in D.values() if s > 80]
    return HD
    
print(marksdistribution({"Fred":55, "James":90, "Jemima":71}))

错误信息

AttributeError: 'list' object has no attribute 'values'

原因是,

D = [s for s in D.values() if s >= 70 and s < 80]

此行替换您在函数内部发送的变量 D 中的值。因此预期的类型不再是字典而是列表。

为 D 取一个不同的变量名并尝试。

def marksdistribution(D):
    N = [s for s in D.values() if s < 50]
    P = [s for s in D.values() if s >= 50 and s < 60]
    Cr = [s for s in D.values() if s >= 60 and s < 70]
    D1 = [s for s in D.values() if s >= 70 and s < 80]
    HD = [s for s in D.values() if s > 80]
    return HD


print(marksdistribution({"Fred": 55, "James": 90, "Jemima": 71}))