Si tengo un objeto que se compare con un elemento de un conjunto Python, pero no es el mismo objeto, ¿hay alguna forma razonable de obtener una referencia al objeto en el conjunto? El caso de uso usaría el conjunto para identificar y compartir datos duplicados.¿Cómo acceder a un elemento de un conjunto usando un objeto equivalente?
Ejemplo (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
Cómo obtener una referencia al uso de a
b
y s
? Puedo pensar de una manera, pero no estoy seguro si no depende de la implementación si obtiene a
o b
. EDITAR: Esto no funciona cuando s tiene más de un elemento; intersección se implementó bastante naturalmente algo así como [x for x in smaller_set if x in larger_set]
>>> for x in set((b,)).intersection(s): c = x
...
>>> c is a
True
Tal vez una buena solución sería utilizar un diccionario que mapea cada clave a sí mismo, en lugar del conjunto.
Si necesita uno específico de dos objetos iguales y con capacidad de manipulación, es probable que los objetos no sean iguales y/o no puedan manipularse. ¿Por qué necesitas esto? – delnan
Creo que sus sospechas están justificadas: pypy 1.7.0 y ironpython 3.0 ambos (pueden) devolver False para su c final es a. – DSM
Podría ahorrar memoria cambiando las referencias al objeto igual a las referencias al mismo objeto. –