It seems that collections.defaultdict perfect for this case (see also @mhawke's answer):
from collections import defaultdict dd = defaultdict(list) for idx, item in enumerate(s): dd[item].append(idx)
Then convert this to a simple dictionary again:
>>> dict(dd) {'Hello': [0, 2], 'World': [1, 3]}
I recently created a package containing a function that can be used as an alternative to iteration_utilities.groupedby :
>>> from iteration_utilities import groupedby >>> from operator import itemgetter >>> s =['Hello','World','Hello','World'] >>> groupedby(enumerate(s), key=itemgetter(1), keep=itemgetter(0)) {'Hello': [0, 2], 'World': [1, 3]}
source share