如何在 Python 中对字典使用 reduce

How to use reduce on dictionary in Python

我有两个 类 - Item 和 AIShoppingCart(它有字典,例如 {"milk" : Item(2, 2.28, 1)})。我必须使用 reduce 从我的购物车中找到最喜欢的商品,并且不允许我使用 max()。不幸的是,我的程序抛出一个错误

<lambda>() takes 1 positional argument but 2 were given


class Item:
def __init__(self,quantity,price,likable):
    self.quantity = quantity
    self.price = price
    self.likable = likable

class AIShoppingCart(ShoppingCart):
def __init__(self,items):
    super().__init__(items)
def add_item(self,name,quantity,price):
    if name in self.items:
        self.items[name].likable+=1
        self.items[name].quantity+=quantity
    else:
        items[name]=Item(quantity,price,1)

def findMostLikable(self):
    return reduce(lambda x:self.items[x].likable>1, self.items)

我该如何使用reduce?

请查找 reduce 的文档。如果你这样做 reduce(f, [a, b, c, d]) 这将基本上应用为 f(f(f(a, b), c), d) - 所以 reduce 基本上一次需要 2 个元素并将它们减少到 1.

在你的例子中,reduce 函数只需要按值选择更大的元素:

return reduce(lambda a, b: a if a[1].likable >= b[1].likable else b,
              self.items.items())

.items() 函数获取字典的键值对作为元组列表,我使用 a[1]/b[1] 获取其值——返回的结果是一个键-值元组。

如果你只想要最大值,而不关心键:

return reduce(lambda a, b: a if a.likable >= b.likable else b,
              self.items.values()).likable