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?

Related of "Convertir lista de tuplas en un diccionario"

 >>> 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!