Reputation: 1
I am totally lost as to why I keep getting errors. I am trying to print the titles of the books listed in alphabetical order using sorted()
.
I keep getting this error:
sorted(BSI, key=list(Book))
TypeError: 'type' object is not iterable
Then this is the code
from collections import namedtuple
Book = namedtuple('Book', 'author title genre year price instock')
BSI = [Book("J.K. Rowling", "Harry Potter", "Fantasy", "2005", 12.00, "34"),
Book("Dr. Seuss", "Green Eggs and Ham", "Children's", "2000", 8.00, "12"),
Book("Margaret Mitchell", "Gone with the Wind", "Fiction", "1980", 9.00, "30"),
Book("John Green", "The Fault in our Stars", "Fiction", "2010", 13.00, "23"),
Book("Stephanie Meyer", "Twilight", "Fantasy", "2008", 15.00, "8"),
Book("Suzanne Collins", "The Hunger Games", "Fantasy", "2005", 17.00, "18")]
for x in BSI:
print(x.title)
y = BSI
for x in BSI:
sorted(BSI, key=list(Book))
Upvotes: 0
Views: 4441
Reputation: 19174
The problem is with list(Book)
. Book is a type. The following might be what you want.
from collections import namedtuple
Book = namedtuple('Book', 'author title genre year price instock')
BSI = [
Book ("J.K. Rowling", "Harry Potter", "Fantasy", "2005", 12.00 , "34"),
Book ("Dr. Seuss", "Green Eggs and Ham", "Children's", "2000", 8.00 , "12"),
Book ("Margaret Mitchell", "Gone with the Wind", "Fiction", "1980", 9.00, "30"),
Book ("John Green", "The Fault in our Stars", "Fiction", "2010", 13.00, "23"),
Book ("Stephanie Meyer", "Twilight", "Fantasy", "2008", 15.00, "8"),
Book ("Suzanne Collins", "The Hunger Games", "Fantasy", "2005", 17.00, "18"),
]
for x in BSI:
print (x.title)
print()
for x in sorted(BSI, key=lambda x: x.title):
print(x.title)
You can elaborate the key if you really think you might have duplicate titles.
Upvotes: 1