On Thu, 08 Mar 2007 09:20:20 +0100, Alexander Eisenhuth wrote:

> Hello,
> 
> what algo do you use, when you want to find the dict values from d, with 
> members 
> of l. Following example:
> 
>  >>> d = {1:2,2:3,3:4,4:5,5:6,6:7,7:8,8:9,9:10}
>  >>> l = [7,8]
>  >>> found_dic_members = <yourCode>
>  >>> print found_dict_members
> [8,9]

It depends. 

If all of the values in d are usable as keys (that is, all the values
are hashable, so no lists or sets etc.) then you can build a
reverse-lookup dictionary and use that for fast look-ups.

>>> d = {1: 'a', 2: 'b', 3: 'c'}
>>> rd = dict(zip(d.values(), d.keys()))
>>> rd
{'a': 1, 'c': 3, 'b': 2}

But if you can't do that, you're stuck with a slow search through the
entire dict:

def reverse_search(d, target):
    """Return the first key of dict d that matches the target value."""
    for key, value in d.iteritems():
        if value == target:
            return key
    raise KeyError('no key found matching that value')


In both cases though, you have to think about what you want to happen for
duplicated values.



-- 
Steven D'Aprano 

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

Reply via email to