namedTuple中的最大值

时间:2014-01-25 00:03:09

标签: python tuples

我是编程新手。我试图在命名元组中找到最大值。我有以下代码:

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

在这种情况下如何找到最大值?

2 个答案:

答案 0 :(得分:4)

maxkey

一起使用
>>> 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'))