Clustering the keys of a dict according to its values
Bruno Desthuilliers
bruno.42.desthuilliers at websiteburo.invalid
Fri Nov 14 10:54:45 EST 2008
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
More information about the Python-list
mailing list