是否有带有关键参数的 set() 的 Python 实现?

Thi*_*Ede 6 python set

我想知道是否有任何set()key参数实现的 python 函数,类似于keyin sorted(iterable, *, key=None, reverse=False)

我认为此功能在某些情况下会很有用,尤其是在无需更改其hash()功能的情况下比较自定义对象时。

想要的效果

示例 1

iterable = [1.0, 1.5, 2.0, 2.5]
x = set(iterable)                 # yields {1.0, 1.5, 2.0, 2.5}
y = set(iterable, key=math.floor) # yields {1.0, 2.0}
Run Code Online (Sandbox Code Playgroud)

示例 2

iterable = ['abc', 'ade', 'bbc', 'abc', 'bfg']
x = set(iterable)                     # yields {'abc', 'ade', 'bbc', 'bfg'}
y = set(iterable, key=lambda x: x[0]) # yields {'abc', 'bbc'}
Run Code Online (Sandbox Code Playgroud)

选择哪个

我可以想象这不会实现,因为如果找到重复项,很难选择选择哪个对象。然而,这可以通过一些策略来克服,例如“先选择”、“随机选择”、“最后选择”。

回答

感谢您的所有回复,Daniel Roseman为这个问题提出了最优雅的解决方案:

key = math.floor # Or any desired key function
y   = set({key(i): i for i in iterable}.values())
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 5

那不是基本上是一个字典,其中键是将函数应用于值的结果吗?

y = {math.floor(i): i for i in iterable}
Run Code Online (Sandbox Code Playgroud)