在Python中,我想使用lambda在列表中找到max元素进行比较.
这段代码没有成功:
# An 'anonymous' object, like JSON object. Use like: Mock(name='Bob', age=30)
class Mock(object):
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
items = [
Mock(cost=10, quantity=1),
Mock(cost=15, quantity=3),
Mock(cost=20, quantity=5),
Mock(cost=100, quantity=2)
]
index, value = max(items, key=lambda(item) : item.cost * item.quantity)
print('$%d, q=%d' % (value.cost, value.quantity))
我收到此错误:
index, value = max(items, key=lambda(item) : item.cost * item.quantity)
TypeError: 'Mock' object is not iterable
我该如何正确实现?
解决方法:
如果您不需要索引,可以直接使用结果:
value = max(items, key=lambda(item) : item.cost * item.quantity)
print value.cost, value.quantity
max返回实际的max项,这是一个Mock实例.您无法将其解压缩为两个项目.
如果你真的想要索引,你可以找到它,或者稍微修改你的搜索以将索引装饰到项目中:
index, value = max(enumerate(items), key=lambda(item): item[1].cost * item[1].quantity)
首先,我们将原始列表转换为第二个列表,其中每个项目都是(索引,值)的元组.然后,键也必须更改,因为item而不是item.cost,现在是一个(index,MockItem)对,所以你需要获取item [1],然后获取属性.不要忘记将结果解压缩到索引和值以获得两者.
标签:python,lambda,collections,python-2-7,max
来源: https://codeday.me/bug/20190722/1507351.html