我认为这将是一次超级简单的排序练习,但我并不理解我所得到的错误。
我正在创建一个简单的Book
类,然后添加两个条目。然后我通过sorted
并使用lambda
进行排序,以便按isbn
属性排序。
books = []
class Book:
def __init__(self, title, author, isbn):
self.title, self.author, self.isbn = title, author, isbn
def __repr__(self):
return repr((self.title, self.author, self.isbn))
#add 2 items
b = Book('Russian for All', 'Chompsky', '334')
books.append(b)
c = Book('English for All', 'Zöd', '229')
books.append(c)
#sort items by the isbn number
sorted_books = sorted(books, key=lambda book: book[2])
a)我相信需要__repr__
,以便在将每个条目添加到数组时获得一个漂亮的元组,如下:
print(books)
[('Russian for All', 'Chompsky', '334'), ('English for All', 'Zöd', '229')]
b)因为它看起来像标准的元组列表,所以使用sorted函数应该没有问题,但是我得到了这个错误:
Traceback (most recent call last):
File "Untitled 2.py", line 19, in <module>
sorted_books = sorted(books, key=lambda book: book[2])
File "Untitled 2.py", line 19, in <lambda>
sorted_books = sorted(books, key=lambda book: book[2])
TypeError: 'Book' object does not support indexing
好像我看到一个代表对象的漂亮元组,但它们实际上被掩盖为对象,而这些对象无法被分类函数访问。
答案 0 :(得分:1)
不,你需要使用:
sorted_books = sorted(books, key=lambda book: book.isbn)
结果:
In [2]: sorted_books = sorted(books, key=lambda book: book.isbn)
In [3]: sorted_books
Out[3]: [('English for All', 'Zöd', '229'), ('Russian for All', 'Chompsky', '334')]
您需要访问图书对象属性isbn
。 __repr__
只是一个字符串表示,用于打印。