我有一个类Foo
,它有一个实例字符串变量id
。我实现了__eq__
和__hash__
魔术方法,因此它们只使用id
,因此Foo
实例及其字符串id
被映射到同一个哈希表桶。但是,有一个dict,键是Foo
个实例,我只有字符串id
。我想检索Foo
中存在的id
实例。
一种方法是迭代dict中的所有键,但是有更高效/更简单的东西吗?
答案 0 :(得分:3)
无法直接检索使用密钥的相应Foo()
对象,编号
您的选择是遍历所有键并匹配id
属性,或者使用Foo(id)
重新创建对象;如果您只需要将其用作查找键,那么这应该就足够了。
如果这些对象具有更多属性且id
唯一映射到这些属性,请考虑添加另一个字典,将映射ID保存到Foo()
个实例。
答案 1 :(得分:2)
只需使用给定的Foo
创建虚拟 id
对象,然后在地图中查找。
答案 2 :(得分:2)
除了@Martijn Pieters的回答:
如果您的Foo
很重,您可以定义一个功能最少的课程Bar
(self.id
,__eq__
和__hash__
)并制作你的Foo
继承了它。
然后,您可以使用轻量级Bar
实例从字典中检索与Foo
对象关联的值。