简单排序Python对象 - 索引错误

时间:2016-09-19 23:54:44

标签: python sorting

我认为这将是一次超级简单的排序练习,但我并不理解我所得到的错误。

我正在创建一个简单的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

好像我看到一个代表对象的漂亮元组,但它们实际上被掩盖为对象,而这些对象无法被分类函数访问。

1 个答案:

答案 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__只是一个字符串表示,用于打印