Si desea específicamente tuplas como los valores en el nuevo diccionario, todavía se puede utilizar defaultdict, y utilizar la concatenación tupla. Esta solución funciona en Python 3.4+:
from collections import defaultdict
source = {'abc': 'a', 'cdf': 'b', 'gh': 'a', 'fh': 'g', 'hfz': 'g'}
target = defaultdict(tuple)
for key in source:
target[source[key]] += (key,)
print(target)
que producirá
defaultdict(<class 'tuple'>, {'a': ('abc', 'gh'), 'g': ('fh', 'hfz'), 'b': ('cdf',)})
esta probablemente será más lenta que la generación de un diccionario mediante la inserción de lista y va a crear más objetos para ser recogidos. Por lo tanto, usted puede construir su diccionario de listas, y luego asignar en tuplas:
target2 = defaultdict(list)
for key in source:
target2[source[key]].append(key)
for key in target2:
target2[key] = tuple(target2[key])
print(target2)
lo que le dará el mismo resultado que el anterior.
No utilice "dict" como nombre de variable, ya que es el nombre de una función incorporada. –