Se ho un oggetto che confronta uguale a un elemento di un set Python, ma non è lo stesso oggetto, c'è un modo ragionevole per ottenere un riferimento all'oggetto nel set? Il caso d'uso userebbe il set per identificare e condividere dati duplicati.Come accedere ad un elemento di un set usando un oggetto equivalente?
Esempio (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
Come ottenere un riferimento a a
utilizzando b
e s
? Posso pensare a un modo, ma non sono sicuro che non dipenda dall'implementazione se ricevi a
o b
. EDIT: Questo non funziona quando s ha più di un elemento; intersezione viene del tutto naturale implementato qualcosa di simile [x for x in smaller_set if x in larger_set]
>>> for x in set((b,)).intersection(s): c = x
...
>>> c is a
True
Forse una buona soluzione alternativa sarebbe quella di utilizzare un dict che mappa ogni tasto a se stesso, al posto del set.
Se è necessario uno specifico di due oggetti uguali e lavabili, è probabile che gli oggetti non siano uguali e/o lavabili. Perchè ti serve? – delnan
Penso che i tuoi sospetti siano giustificati: pypy 1.7.0 e ironpython 3.0 entrambi (can) return False per la tua c finale è a. – DSM
Potrei risparmiare memoria cambiando i riferimenti a oggetti uguali a riferimenti allo stesso oggetto. –