使用 itemgetter 获取对象列表的最大值
using itemgetter to get the max of a list of objects
我有一个对象列表:
my_list = [{id : 1, value1: 30, value2: 40}, {id : 2, value1: 20, value2: 50}]
我想得到两个字典之间的最大值(我的键必须是最大值(值1和值2))
我正在将 max 与 getitem 一起使用,但我正在努力让它工作:
my_new_list = max(my_list, key=max([itemgetter("value1", "value2")]))
预期输出:
{id : 2, value1: 20, value2: 50}
提前致谢
itemgetter
returns 必须应用于列表中对象的可调用对象。
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)
我有一个对象列表:
my_list = [{id : 1, value1: 30, value2: 40}, {id : 2, value1: 20, value2: 50}]
我想得到两个字典之间的最大值(我的键必须是最大值(值1和值2))
我正在将 max 与 getitem 一起使用,但我正在努力让它工作:
my_new_list = max(my_list, key=max([itemgetter("value1", "value2")]))
预期输出:
{id : 2, value1: 20, value2: 50}
提前致谢
itemgetter
returns 必须应用于列表中对象的可调用对象。
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)