Python 从dict中的键检索键
我有一个类Python 从dict中的键检索键,python,dictionary,Python,Dictionary,我有一个类Foo,它有一个实例字符串变量id。我实现了\uuuu eq\uuuu和\uuuu hash\uuuu魔术方法,因此它们只使用id,因此Foo实例及其字符串id映射到同一个哈希表存储桶。但是,假设有一个dict,其键是Foo实例,我只有字符串id。我想检索Foo实例,该实例中存在id 一种方法是遍历dict中的所有键,但是否有更有效/简单的方法?无法检索直接使用键的相应Foo()对象,否 您可以选择在所有键上循环并匹配id属性,或者使用Foo(id)重新创建对象;如果您只需要将其用作查
Foo
,它有一个实例字符串变量id
。我实现了\uuuu eq\uuuu
和\uuuu hash\uuuu
魔术方法,因此它们只使用id
,因此Foo
实例及其字符串id
映射到同一个哈希表存储桶。但是,假设有一个dict,其键是Foo
实例,我只有字符串id
。我想检索Foo
实例,该实例中存在id
一种方法是遍历dict中的所有键,但是否有更有效/简单的方法?无法检索直接使用键的相应
Foo()
对象,否
您可以选择在所有键上循环并匹配id
属性,或者使用Foo(id)
重新创建对象;如果您只需要将其用作查找键,那么这就足够了
如果这些对象具有更多的属性和<代码> ID 映射到这些属性,请考虑添加另一个字典,将映射ID保持到
Foo
很重,你可以用最小的功能(self.id
,\uuuuuuuuueq\uuuu
和\uuuu hash\uuuuuu
)定义一个类Bar
,并使你的Foo
继承自它
然后,您可以使用轻量级
Bar
实例从字典中检索与Foo
对象关联的值。我需要检索存储在dict中的Foo
实例的相同引用,因此实例化新的Foo
实例不是一个选项。我喜欢为id:Foo
映射单独设置一个dict
的想法。它以牺牲空间效率换取速度。大多数情况下,代码范围只知道字符串id
,它需要修改相应的Foo
实例,因此我认为我必须使用单独的dict。我意识到我的代码需要进行重大重构。原始的dict
中的值应该是Foo
中的实例变量,新的dict是id:Foo
。所以我的问题是没有意义的,但是很高兴知道我们不能使用字典的键来检索键。为什么不使用字符串id
来检索值呢?它甚至比objectBar
更轻。我还想使用一个键来检索一个键,而不是一个值。也许我的情况表明我的代码分解存在一些问题。查看我对Martjin答案的评论。已经看到了(发布此答案后)。我会小心地从字符串创建可变类,这在Python中是定义不变的。“从字符串创建可变类”-你的意思是什么,危险是什么?如果你从字符串继承,你的Foo
将是一个字符串,但同时它将是可变的。这只是我的直觉,这不是一个好主意,我现在无法准确预见所有的含义,我只是看到可能有一些。因此,我宁愿寻找另一种解决方案(比如将id存储为成员),除非我有足够的时间和Python理解来分析它;o) 我的Foo
继承自object
,而不是str
。字符串id
已经是Foo
的成员变量。