如何在 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
我有两个 类 - 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