Cómo revertir un diccionario que tiene valores repetidos.

Entonces, tengo un diccionario con casi 100,000 pares (clave, valores) y la mayoría de las claves se asignan a los mismos valores. Por ejemplo imagina algo así:

mydict = {'a': 1, 'c': 2, 'b': 1, 'e': 2, 'd': 3, 'h': 1, 'j': 3} 

Lo que quiero hacer es invertir el diccionario para que cada valor en mydict sea una clave en reverse_dict y se asigne a una lista de todas las mydict.keys que se utilizaron para asignar ese valor al mydict . Entonces, basado en el ejemplo anterior, obtendría:

 reversed_dict = {1: ['a', 'b', 'h'], 2:['e', 'c'] , 3:['d', 'j']} 

Se me ocurrió una solución que es muy cara y realmente me gustaría escuchar cualquier idea más eficiente que la mía.

mi solución cara

 reversed_dict = {} for value in mydict.values(): reversed_dict[value] = [] for key in mydict.keys(): if mydict[key] == value: if key not in reversed_dict[value]: reversed_dict[value].append(key) Output >> reversed_dict = {1: ['a', 'b', 'h'], 2: ['c', 'e'], 3: ['d', 'j']} 

Realmente apreciaría escuchar cualquier idea mejor y más eficiente que la mía. ¡Gracias!

     from collections import defaultdict reversed_dict = defaultdict(list) for key,value in mydict.iteritems(): reversed_dict[value].append(key) 

    Por favor, no use dict como variable, esto choca con la función dict ()

    Creo que estás perdiendo algunos ciclos reemplazando una clave con la misma clave una y otra vez …

     reversed_dict = {} for value in mydict.values(): if value not in reversed_dict.keys(): #checking to be sure it hasn't been done. reversed_dict[value] = [] for key in mydict.keys(): if mydict[key] == value: if key not in reversed_dict[value]: reversed_dict[value].append(key) 
     for k,v in dict.iteritems(): try: reversed_dict[v].append(k) except KeyError: reversed_dict[v]=[k] 
     reversed_dict = collections.defaultdict(list) for key, value in dict_.iteritems(): reversed_dict[value].append(key)