Если у меня есть объект, который сравнивается с элементом набора Python, но не является тем же самым объектом, есть ли разумный способ получить ссылку на объект в наборе ? Вариант использования будет использовать набор для выявления и обмена дублированными данными.
Пример (Python 2.7):
>>> a = "This is a string"
>>> b = "This is a string"
>>> a is b
False
>>> a == b
True
>>> s = set((a,))
>>> b in s
True
Как получить ссылку на a
, используя b
и s
? Я могу придумать один способ, но не уверен, не зависит ли он от реализации, получите ли вы a
или b
. РЕДАКТИРОВАТЬ: Это не работает, если s имеет более одного элемента; Пересечение вполне естественно реализуется примерно так: [x для x в меньшем_наборе, если x в большом_наборе]
>>> for x in set((b,)).intersection(s): c = x
...
>>> c is a
True
Возможно, хорошим обходным решением было бы использовать dict, который отображает каждый ключ на себя, а не на набор.