Clustering the keys of a dict according to its values

bearophileHUGS at lycos.com bearophileHUGS at lycos.com
Fri Nov 14 08:20:29 EST 2008


Not much tested:

from collections import defaultdict

def cluster(pairs):
    """
    >>> d = {'a':1, 'b':2, 'c':1, 'd':1, 'e':2, 'f':3}
    >>> cluster(d) == {1:['a', 'c', 'd'], 2:['b', 'e'], 3:['f']}
    True
    >>> p = [1, 2, 1, 1, 2, 3]
    >>> cluster(p) == {1: [0, 2, 3], 2: [1, 4], 3: [5]}
    True
    """
    d = defaultdict(list)
    if isinstance(pairs, list):
        for k, v in enumerate(pairs):
            d[v].append(k)
    else:
        for k, v in pairs.iteritems():
            d[v].append(k)
    return d

if __name__ == "__main__":
    import doctest
    doctest.testmod()
    print "Doctests finished.\n"

Bye,
bearophile



More information about the Python-list mailing list