为了账号安全,请及时绑定邮箱和手机立即绑定

使用 itemgetter 获取对象列表的最大值

使用 itemgetter 获取对象列表的最大值

拉风的咖菲猫 2023-10-31 15:01:46
我有一个对象列表:my_list = [{id : 1, value1: 30, value2: 40}, {id : 2, value1: 20, value2: 50}]我想获得两个字典之间的最大值(我的键必须是 max (value1 和 value2) )我正在将 max 与 getitem 一起使用,但我正在努力使其正常工作:my_new_list = max(my_list, key=max([itemgetter("value1", "value2")]))预期输出:{id : 2, value1: 20, value2: 50}提前致谢
查看完整描述

1 回答

?
米脂

TA贡献1836条经验 获得超3个赞

itemgetter返回一个必须应用于列表中对象的可调用对象。

my_new_list = max(my_list, key=lambda obj: max(itemgetter("value1", "value2")(obj)))

如果您不需要调用max结果,则该itemgetter值本身就是一个有效的key参数。


理想情况下,Python 会有某种组合运算符用于将函数链接在一起,在这种情况下你可以编写类似的代码

my_new_list = max(my_list, key=max ∘ itemgetter("value1, "value2"))

假设的运算符在哪里定义为

def __compose__(self, f):  # ∘
    return lambda x: self(f(x))

事实上,在Coconut(用于函数式编程的 Python 超集,可编译为纯 Python)中存在这样的运算符:

my_new_list = max(my_list, key=max .. itemgetter("value1", "value2")
my_new_list = max(my_list, key=max <.. itemgetter("value1", "value2")

前者类似于传统的函数组合;后者明确指示了方向,就好像您将值从一个函数传递到下一个函数一样。还有一个..>操作符,用于“反转”管道的方向。

my_new_list = max(my_list, key=itemgetter("value1", "value2") ..> max)


查看完整回答
反对 回复 2023-10-31
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信