我有一个对象列表: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)
添加回答
举报
0/150
提交
取消