Если вы действительно хотите использовать кортежи в качестве значений в новом словаре, вы все равно можете использовать defaultdict и использовать конкатенацию кортежей.Это решение работает в 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)
, которое будет производить
defaultdict(<class 'tuple'>, {'a': ('abc', 'gh'), 'g': ('fh', 'hfz'), 'b': ('cdf',)})
Это, вероятно, будет медленнее, чем создание словаря путем вставки списка, и создаст больше объектов для сбора,Таким образом, вы можете построить свой словарь из списков, а затем отобразить его в кортежи:
target2 = defaultdict(list)
for key in source:
target2[source[key]].append(key)
for key in target2:
target2[key] = tuple(target2[key])
print(target2)
, что даст тот же результат, что и выше.