Florian Brucker a écrit :
Hi everybody!

Given a dictionary, I want to create a clustered version of it, collecting keys that have the same value:

 >>> d = {'a':1, 'b':2, 'c':1, 'd':1, 'e':2, 'f':3}
 >>> cluster(d)
{1:['a', 'c', 'd'], 2:['b', 'e'], 3:['f']}

That is, generate a new dict which holds for each value of the old dict a list of the keys of the old dict that have that very value.
>
Another requirement is that it should also work on lists, in that case with indices instead of keys. We may assume that all values in the original dict/list can be used as dict keys.

from collections import defaultdict

def cluster(source):
    iteritems = getattr(
        source, "iteritems",
        lambda : enumerate(source)
        )
    index = defaultdict(list)
    for k, v in iteritems():
         index[k].append(v)
    return index

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

Reply via email to