为什么实例的属性不能被lambda识别?

时间:2018-11-29 16:46:58

标签: python

我创建了五个列表来存储满足特定条件的实例,并打算按instance属性“ hours”对它们进行排序。我可以读取循环外的属性,然后分别运行此行,并且没有错误。但是我运行该块,结果表明该属性不存在。是什么原因造成的?我该怎么解决?

  File "F:/Aalto study/semester3/programming/Project_studyplan.py", line 143, in print_course
    courselist.sort(key = lambda x: x.hours[0])
  File "F:/Aalto study/semester3/programming/Project_studyplan.py", line 143, in <lambda>
    courselist.sort(key = lambda x: x.hours[0])
AttributeError: 'list' object has no attribute 'hours' 

WORKbook跟踪:

In [196]: courselist[0].hours
Out[196]: (9, 10)

In [199]:courselist.sort(key = lambda x: x.hours)
In [200]:courselist.sort(key = lambda x: x.hours[0])

代码:

    courselist = [[] for _ in range(5)]
    for selected in self.course:
        if given_period == selected.period:
            course_n += 1
            courselist[selected.weekday-1].append(selected)
    courselist.sort(key = lambda x: x.hours[0])

借助所有人的回答和建议,我找到了问题所在,并彻底解决了问题。 :)

3 个答案:

答案 0 :(得分:1)

courselist = [[] for _ in range(5)]
...
courselist.sort(key = lambda x: x.hours[0])

courselist的每个元素都是一个列表。因此,您的lambda表达式中的每个x都是这些列表之一。 list没有属性hours:这显然是course的属性。您需要查看这些列表以查找课程。

由于您未能包含Minimal, complete, verifiable example,因此我们无法修复您的代码。

答案 1 :(得分:1)

您说过要对courselist中的5个子列表进行排序,但是您的代码尝试对courselist本身进行排序。由于courselist中的对象是列表,因此它们没有名为hours的属性。大概您的selected对象可以。因此,请分别对每个子列表进行排序:

for day in courselist:
    day.sort(key = lambda x: x.hours[0])

(由于您尚未提供完整的示例,因此我无法测试此代码是否完全正确。)

答案 2 :(得分:0)

在143行中,错误出在行中

courselist.sort(key = lambda x: x.hours[0])

更确切地说,在x.hours中。 x是一个列表。由于我不知道应该几点钟,因此无法解决。通过索引(非负整数)访问列表