Как получить доступ к элементу набора с помощью эквивалентного объекта?

Если у меня есть объект, который сравнивается с элементом набора 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, который отображает каждый ключ на себя, а не на набор.

16
задан Janne Karila 24 December 2011 в 12:32
поделиться