On 2015-06-24 01:21, Dan Stromberg wrote:
I know that sounds strange: usually we look up values by key, not keys.

But suppose you have a strange key type that despite being "equal", is
not identical in some fields, and you need to see those fields.

Is there a way of getting the key used by the dictionary, short of
storing a reference to it in the value, or using a second dictionary?

Yes!

Start with a dict:

>>> d = {1.0: 'one', 2: 'two', 3+0j: 'three'}
>>> d[1]
'one'
>>> d[2]
'two'
>>> d[3]
'three'

Suppose we want the key that matches 3:

>>> k = 3

Get the keys as a set:

>>> s = set(s)
>>> s
{1.0, 2, (3+0j)}

Using intersection doesn't return what we want:

>>> s & {k}
{3}
>>> {k} & s
{3}

so we have to get creative.

Remove the keys that _don't_ match:

>>> s - {k}
{1.0, 2}

and then remove them from the set:

>>> s - (s - {k})
{(3+0j)}

Finally, get the key:

>>> (s - (s - {k})).pop()
(3+0j)

Simple, really! :-)

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to