假设我有一组myset
个自定义对象可能相同,尽管它们的引用不同(a == b and a is not b
)。现在,如果我add(a)
到集合,Python正确地假设a in myset and b in myset
,即使集合中只有len(myset) == 1
个对象。
很清楚。但现在是否可以仅使用a
从集合中以某种方式提取b
的值?假设对象是可变的,我想要更改它们,忘记直接引用a
。换句话说,我正在寻找myset[b]
操作,它将完全返回集合的成员a
。
在我看来,类型set
不能这样做(比遍历其所有成员更快)。如果是这样,至少有一种有效的解决方法吗?
答案 0 :(得分:5)
我不认为set
支持在O(1)时间内检索项目,但您可以使用dict
代替。
d = {}
d[a] = a
retrieved_a = d[b]
答案 1 :(得分:0)
如果您只有myset
和b
,那么从这个角度来看,您将无法访问a
,因为它不在那里。如果你创建了多个可变对象并将其中一个添加到myset
,那么当你只处理myset
或你添加的对象时,其他对象就不会被“知道”。
如果您想修改a
和b
,则需要在某处跟踪这两个对象。
答案 2 :(得分:0)
也许这个:
(myset - (myset - set([b]))).pop() is a