Convertir lista de tuplas en un diccionario

Estoy buscando una manera de convertir una lista de tuplas como esta:

[(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)] 

en un diccionario como este:

 {4:[1,2,3] ,15:[4,5,9,11,12], 23:[6,7,8,10]} 

El segundo elemento de cada tupla se convierte en una clave del diccionario, y todos los primeros elementos de la tupla asociados con esa clave se almacenan en una lista de valores.

¿Me puede mostrar cómo se puede hacer eso?

 >>> from collections import defaultdict >>> l= [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)] >>> d= defaultdict( list ) >>> for v, k in l: ... d[k].append(v) ... >>> d defaultdict(, {23: [6, 7, 8, 10], 4: [1, 2, 3], 15: [4, 5, 9, 11, 12]}) >>> [ {k:d[k]} for k in sorted(d) ] [{4: [1, 2, 3]}, {15: [4, 5, 9, 11, 12]}, {23: [6, 7, 8, 10]}] 
 >>> a = [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)] >>> b = {} >>> for i, j in a: ... b.setdefault(j, []).append(i) ... >>> b {23: [6, 7, 8, 10], 4: [1, 2, 3], 15: [4, 5, 9, 11, 12]} >>> 
 tuples = [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)] dicts = {} for elem in tuples: try: dicts[elem[1]].append(elem[0]) except KeyError: dicts[elem[1]] = [elem[0],] 
 l = [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)] d = {} for v, k in l: d.setdefault(k, []).append(v) 

Esto lo hara:

 from collections import defaultdict def to_list_of_dicts(list_of_tuples): d = defaultdict(list) for x, y in list_of_tuples: d[y].append(x) return sorted([{x: y} for (x, y) in d.items()]) 

No es lujoso pero es simple.

 l = [(1,4),(2,4),(3,4),(4,15),(5,15),(6,23),(7,23),(8,23),(9,15),(10,23),(11,15),(12,15)] d = dict((k, [i[0] for i in l if i[1] == k]) for k in frozenset(j[1] for j in l)) 

Huzzah!