gpt4 book ai didi

python - python对象的自定义过滤函数

转载 作者:行者123 更新时间:2023-11-30 21:52:10 24 4
gpt4 key购买 nike

我有一个像 (id, ) 这样的元组列表,我想删除重复的 id。如果有多对具有相同 id,我想保留具有较高分数的对象的那对。我怎样才能有效地实现这一点?


# For the sake of example - assume that a hashing function is implemented based on the score

class Object
def __init__(self):
score = 0
def __repr__(self):
return f'<Object {self.score}>'

pairs = [(1, <Object 1>), (1, <Object 1>), (3, <Object 7>), (9, <Object 3>), (9, <Object 4>)]

filtered_pairs = [(1, <Object 1>), (3, <Object 7>), (9, <Object 4>)]

我知道我可以对这些对调用set,但这只会处理 id 和分数相等的情况(例如对象 1)。如何过滤它,但在有匹配的 id 的情况下,取较高的分数?

我知道我可以从 itertools 进行 groupby,并使用分数作为键实现排序,然后从每个组中取出最后一项,但我想知道是否有更有效的方法。

最佳答案

您可以使用itertools.groupby按第一个值进行分组并在结果上使用max

from itertools import groupby


class Object:

def __init__(self, score):
self.score = score

def __repr__(self):
return f'<Object {self.score}>'


pairs = [(1, Object(1)), (1, Object(1)), (3, Object(7)), (9, Object(3)), (9, Object(4))]

filtered_pairs = [max(list(elem), key=lambda x: x[1].score) for grp, elem in groupby(pairs, lambda x: (x[0]))]
print(filtered_pairs)

输出:

[(1, <Object 1>), (3, <Object 7>), (9, <Object 4>)]

关于python - python对象的自定义过滤函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59961628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com