On Sat, Aug 2, 2008 at 6:07 AM, Dick Moores <[EMAIL PROTECTED]> wrote:
> I'm pretty new to Python's dictionaries, but I had a need for a function
> that would find the values in a dict that have more than one key each.

>From your sample output it appears that you want not just the values,
but a list of (value, keys) pairs for which there are more than one
key. It is easy to just build a reverse dict and filter its items:

In [15]: from collections import defaultdict
In [16]: rev=defaultdict(list)
In [18]: for k, v in d.iteritems():
    rev[v].append(k)

In [20]: [ [v, keys] for v, keys in rev.iteritems() if len(keys) > 1 ]

Out[20]:
[[1, ['a', 'e', 'g']],
 [2, ['b', 'f', 'i', 'h']],
 [4, ['d', 'j']],
 ['U.S. Senator', ['John McCain', 'Barack Obama']],
 [56, [45, 55]]]

This also has the advantage of making only two passes over the data so
its performance should be O(n). Your solution and Andre's make one or
more passes over the data for each data element so they will have
O(n*n) performance meaning for a large dict they could be very slow.

Kent
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to