如何在 Python 中对字典使用 reduce
Posted
技术标签:
【中文标题】如何在 Python 中对字典使用 reduce【英文标题】:How to use reduce on dictionary in Python 【发布时间】:2021-02-27 03:01:19 【问题描述】:我有两个类 - Item 和 AIShoppingCart(其中有字典,例如 "milk" : Item(2, 2.28, 1))。我必须使用 reduce 从我的购物车中找到最喜欢的商品,并且我不能使用 max()。不幸的是,我的程序抛出了一个错误
() 接受 1 个位置参数,但给出了 2 个
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?
【问题讨论】:
【参考方案1】:请查阅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
【讨论】:
我明白了,但我无法解决如何通过喜欢的属性来比较项目。 那是a[1].likable
,我会更新我的答案,对此感到抱歉
我收到以下错误('eggs', [1].likable
添加到最后以获取值,但在这种情况下,您可以直接迭代.values()
。我会更新我的答案。以上是关于如何在 Python 中对字典使用 reduce的主要内容,如果未能解决你的问题,请参考以下文章