Если у меня есть объект, который сравнивается с элементом набора 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
. EDIT: Это не работает, когда s имеет более одного элемента; пересечение вполне естественно реализовано примерно как [x for x in smaller_set if x in larger_set]
>>> for x in set((b,)).intersection(s): c = x
...
>>> c is a
True
Возможно, хорошим решением будет использование dict, который отображает каждую клавишу для себя, а не для набора.