“类型错误'类型'对象不可迭代”

时间:2016-04-13 20:16:25

标签: python-3.x iterable sorted namedtuple

我完全迷失了为什么我一直都会遇到错误。我正在尝试使用sorted()按字母顺序打印所列书籍的标题。

我一直收到这个错误:

sorted(BSI, key = list(Book))
TypeError: 'type' object is not iterable

然后这是代码

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))

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

问题在于list(Book)。书是一种类型。以下可能是您想要的。

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)

如果您认为自己可能有重复的标题,则可以详细说明该键。