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