我是编程新手。我试图在命名元组中找到最大值。我有以下代码:
Book = namedtuple('Book', 'author title genre year price instock')
BSI = [
Book('George Orwell', 'Animal Farm', 'Fiction', 1945, 9.99, 21),
Book('J.K. Rowling', 'Harry Potter and the Half Blood Prince', 'Fantasy', 2007, 24.26, 32)]
我制作了以下代码来查找库存值(最后两个元素(price * instock))
def inventory_value(b: Book)->str:
return (b.price * b.instock)
但是,当我尝试使用以下代码找到最大值时,它似乎不起作用。
def top_value (b: Book):
for item in b:
return(max(inventory_value(item)))
试图找到最大值。库存价值。
如果我只是在top_value函数中使用print语句,则会给出正确的值。 打印(inventory_value(项))
209.79
776.32
在这种情况下如何找到最大值?
答案 0 :(得分:4)
将max
与key
:
>>> def inventory_value(b: Book)->str:
... return (b.price * b.instock)
...
>>> max(BSI, key=inventory_value)
Book(author='J.K. Rowling', title='Harry Potter and the Half Blood Prince', genre='Fantasy', year=2007, price=24.26, instock=32)
答案 1 :(得分:0)
您可以将inventory_value作为属性添加到指定的元组,然后您不需要单独的函数来查找books inventory_value,然后使用max with key = operator.attrgetter('inventory_value')
from collections import namedtuple
import operator
class Book(namedtuple('Book', 'author title genre year price instock')):
__slots__ = ()
@property
def inventory_value(self):
return self.price * self.instock
BSI = [
Book('George Orwell', 'Animal Farm', 'Fiction', 1945, 9.99, 21),
Book('J.K. Rowling', 'Harry Potter and the Half Blood Prince',
'Fantasy', 2007, 24.26, 32)]
print max(BSI, key=operator.attrgetter('inventory_value'))