是否有一个 Python 容器,其作用类似于字典,但不需要键和值?

Ale*_*are 1 python

假设我有:

@dataclass
class Foo:
  foo_id: int
  # Other interesting fields.

  def __hash__(self):
    return self.foo_id.__hash__()
Run Code Online (Sandbox Code Playgroud)

我做了一个foos_set = {Foo(i) for i in range(10)}. 我一直假设set.remove使用哈希进行恒定时间查找。所以我认为这种想法应该foos_set.remove(6)有效是合理的。但实际上,它引发了一个KeyError. 你需要这样做foo_set.remove(Foo(6))。事实上,如果有更多字段,您需要确保所有字段都匹配!

我想对我来说正确的做法就是制作一个foos_dict = {i: Foo(i) for i in range(10)}. 我很乐意这样做,但它只是感觉不必要的笨重,所以我在这里询问是否还有另一个我不知道的容器。

Eur*_*eka 5

如果您希望能够根据 id 跳转到并删除特定条目,请使用字典

字典是一个卓越的容器,它通过特定的信息(即键)进行索引。

实际上,集合是在整个条目上建立索引的,而不仅仅是在键上。列表的索引不是条目本身的一部分,而是其在列表中的位置。

所以

foos_dict = {i: Foo(i) for i in range(10)}
Run Code Online (Sandbox Code Playgroud)

事实上,这是实现您想要的目标的完美方式。

证明你需要一本字典!

您实际上是在描述一本字典:

我还希望能够仅使用 ID 从集合中检索元素(无需进行搜索)。